author | Shawn Walker <srw@sun.com> |
Tue, 21 Jul 2009 01:06:37 -0500 | |
changeset 1242 | f6aa06e1c391 |
parent 1240 | b261f33b84bd |
child 1252 | 3b1b69011fcf |
permissions | -rw-r--r-- |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/python2.4 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
2 |
# |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
3 |
# CDDL HEADER START |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
4 |
# |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
5 |
# The contents of this file are subject to the terms of the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
6 |
# Common Development and Distribution License (the "License"). |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
7 |
# You may not use this file except in compliance with the License. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
8 |
# |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
10 |
# or http://www.opensolaris.org/os/licensing. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
11 |
# See the License for the specific language governing permissions |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
12 |
# and limitations under the License. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
13 |
# |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
19 |
# |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
20 |
# CDDL HEADER END |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
21 |
# |
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
22 |
|
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
23 |
# |
835
34ec4401dc48
686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents:
786
diff
changeset
|
24 |
# Copyright 2009 Sun Microsystems, Inc. All rights reserved. |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
25 |
# Use is subject to license terms. |
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
26 |
# |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
27 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
28 |
import copy |
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
29 |
import os |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
30 |
import simplejson as json |
1072
66ce6aa346d7
8132 __licenses should use StringIO
Rich Burridge <rich.burridge@sun.com>
parents:
1053
diff
changeset
|
31 |
import StringIO |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
32 |
import sys |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
33 |
import threading |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
34 |
import urllib |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
35 |
import urllib2 |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
36 |
|
1019
e61c57c724c9
7663 disable_fmri should be synchronous
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
996
diff
changeset
|
37 |
import pkg.client.actuator as actuator |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
38 |
import pkg.client.api_errors as api_errors |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
39 |
import pkg.client.bootenv as bootenv |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
40 |
import pkg.client.history as history |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
41 |
import pkg.client.image as image |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
42 |
import pkg.client.indexer as indexer |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
43 |
import pkg.client.publisher as publisher |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
44 |
import pkg.client.query_parser as query_p |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
45 |
import pkg.fmri as fmri |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
46 |
import pkg.misc as misc |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
47 |
import pkg.search_errors as search_errors |
1231
f7b99e8118d2
9290 need a way to find the file dependencies of a package
Brock Pytlik <bpytlik@sun.com>
parents:
1191
diff
changeset
|
48 |
import pkg.variant as variant |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
49 |
|
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
50 |
from pkg.client.imageplan import EXECUTED_OK |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
51 |
from pkg.client import global_settings |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
52 |
|
1141
a74d6815a7fc
4178 unfound_fmris is a poor name
Rich Burridge <rich.burridge@sun.com>
parents:
1140
diff
changeset
|
53 |
CURRENT_API_VERSION = 15 |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
54 |
CURRENT_P5I_VERSION = 1 |
696
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
688
diff
changeset
|
55 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
56 |
class ImageInterface(object): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
57 |
"""This class presents an interface to images that clients may use. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
58 |
There is a specific order of methods which must be used to install |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
59 |
or uninstall packages, or update an image. First, plan_install, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
60 |
plan_uninstall, or plan_update_all must be called. After that |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
61 |
method completes successfully, describe may be called, and prepare |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
62 |
must be called. Finally, execute_plan may be called to implement |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
63 |
the previous created plan. The other methods do not hav an ordering |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
64 |
imposed upon them, and may be used as needed. Cancel may only be |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
65 |
invoked while a cancelable method is running.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
66 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
67 |
# Constants used to reference specific values that info can return. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
68 |
INFO_FOUND = 0 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
69 |
INFO_MISSING = 1 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
70 |
INFO_MULTI_MATCH = 2 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
71 |
INFO_ILLEGALS = 3 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
72 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
73 |
# Private constants used for tracking which type of plan was made. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
74 |
__INSTALL = 1 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
75 |
__UNINSTALL = 2 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
76 |
__IMAGE_UPDATE = 3 |
696
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
688
diff
changeset
|
77 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
78 |
def __init__(self, img_path, version_id, progesstracker, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
79 |
cancel_state_callable, pkg_client_name): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
80 |
"""Constructs an ImageInterface. img_path should point to an |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
81 |
existing image. version_id indicates the version of the api |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
82 |
the client is expecting to use. progesstracker is the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
83 |
progresstracker the client wants the api to use for UI |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
84 |
callbacks. cancel_state_callable is a function which the client |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
85 |
wishes to have called each time whether the operation can be |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
86 |
canceled changes. It can raise VersionException and |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
87 |
ImageNotFoundException.""" |
696
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
688
diff
changeset
|
88 |
|
1141
a74d6815a7fc
4178 unfound_fmris is a poor name
Rich Burridge <rich.burridge@sun.com>
parents:
1140
diff
changeset
|
89 |
compatible_versions = set([15]) |
696
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
688
diff
changeset
|
90 |
|
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
594
diff
changeset
|
91 |
if version_id not in compatible_versions: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
92 |
raise api_errors.VersionException(CURRENT_API_VERSION, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
93 |
version_id) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
94 |
|
696
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
688
diff
changeset
|
95 |
# The image's History object will use client_name from |
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
688
diff
changeset
|
96 |
# global_settings, but if the program forgot to set it, |
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
688
diff
changeset
|
97 |
# we'll go ahead and do so here. |
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
688
diff
changeset
|
98 |
if global_settings.client_name is None: |
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
688
diff
changeset
|
99 |
global_settings.client_name = pkg_client_name |
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
688
diff
changeset
|
100 |
|
1242
f6aa06e1c391
6758 api should recreate image object on reset
Shawn Walker <srw@sun.com>
parents:
1240
diff
changeset
|
101 |
# Store this for reset(). |
f6aa06e1c391
6758 api should recreate image object on reset
Shawn Walker <srw@sun.com>
parents:
1240
diff
changeset
|
102 |
self.__img_path = img_path |
f6aa06e1c391
6758 api should recreate image object on reset
Shawn Walker <srw@sun.com>
parents:
1240
diff
changeset
|
103 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
104 |
self.__img = image.Image() |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
105 |
self.__img.find_root(img_path) |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
106 |
self.__img.load_config() |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
107 |
self.__progresstracker = progesstracker |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
108 |
self.__cancel_state_callable = cancel_state_callable |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
109 |
self.__plan_type = None |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
110 |
self.__plan_desc = None |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
111 |
self.__prepared = False |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
112 |
self.__executed = False |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
113 |
self.__be_name = None |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
114 |
self.__can_be_canceled = False |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
115 |
self.__canceling = False |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
116 |
self.__activity_lock = threading.Lock() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
117 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
118 |
@property |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
119 |
def img(self): |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
120 |
"""Private; public access to this property will be removed at |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
121 |
a later date. Do not use.""" |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
122 |
return self.__img |
884
d780afc023ff
3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents:
838
diff
changeset
|
123 |
|
d780afc023ff
3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents:
838
diff
changeset
|
124 |
@staticmethod |
d780afc023ff
3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents:
838
diff
changeset
|
125 |
def check_be_name(be_name): |
1076
db86977aa656
8048 image update doesn't check to see if specified be-name already exists
Rich Burridge <rich.burridge@sun.com>
parents:
1072
diff
changeset
|
126 |
bootenv.BootEnv.check_be_name(be_name) |
1080
147a665c552c
8394 image-update without a --be-name fails.
Rich Burridge <rich.burridge@sun.com>
parents:
1076
diff
changeset
|
127 |
return True |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
128 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
129 |
def plan_install(self, pkg_list, filters, refresh_catalogs=True, |
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
594
diff
changeset
|
130 |
noexecute=False, verbose=False, update_index=True): |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
131 |
"""Contructs a plan to install the packages provided in |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
132 |
pkg_list. pkg_list is a list of packages to install. filters |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
133 |
is a list of filters to apply to the actions of the installed |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
134 |
packages. refresh_catalogs controls whether the catalogs will |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
135 |
automatically be refreshed. noexecute determines whether the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
136 |
history will be recorded after planning is finished. verbose |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
137 |
controls whether verbose debugging output will be printed to the |
594
b072bc027c54
3770 pkg install when authority unavailable traces back
Brock Pytlik <bpytlik@sun.com>
parents:
565
diff
changeset
|
138 |
terminal. Its existence is temporary. It returns a tuple of |
b072bc027c54
3770 pkg install when authority unavailable traces back
Brock Pytlik <bpytlik@sun.com>
parents:
565
diff
changeset
|
139 |
two things. The first is a boolean which tells the client |
b072bc027c54
3770 pkg install when authority unavailable traces back
Brock Pytlik <bpytlik@sun.com>
parents:
565
diff
changeset
|
140 |
whether there is anything to do. The third is either None, or an |
b072bc027c54
3770 pkg install when authority unavailable traces back
Brock Pytlik <bpytlik@sun.com>
parents:
565
diff
changeset
|
141 |
exception which indicates partial success. It can raise |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
142 |
PlanCreationException, PermissionsException and |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
143 |
InventoryException. The noexecute argument is included |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
144 |
for compatibility with operational history. |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
145 |
The hope is it can be removed in the future.""" |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
146 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
147 |
self.__activity_lock.acquire() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
148 |
try: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
149 |
self.__set_can_be_canceled(True) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
150 |
if self.__plan_type is not None: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
151 |
raise api_errors.PlanExistsException( |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
152 |
self.__plan_type) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
153 |
try: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
154 |
self.log_operation_start("install") |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
155 |
# Verify validity of certificates before |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
156 |
# attempting network operations. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
157 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
158 |
self.__img.check_cert_validity() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
159 |
except api_errors.ExpiringCertificate, e: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
160 |
misc.emsg(e) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
161 |
|
594
b072bc027c54
3770 pkg install when authority unavailable traces back
Brock Pytlik <bpytlik@sun.com>
parents:
565
diff
changeset
|
162 |
exception_caught = None |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
163 |
if refresh_catalogs: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
164 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
165 |
self.__img.refresh_publishers( |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
166 |
progtrack=self.__progresstracker) |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
167 |
except KeyboardInterrupt: |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
168 |
raise |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
169 |
except api_errors.InvalidDepotResponseException: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
170 |
raise |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
171 |
except: |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
172 |
# Since this is not a refresh |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
173 |
# that was explicitly requested, |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
174 |
# it doesn't matter if it fails. |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
175 |
pass |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
176 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
177 |
self.__img.make_install_plan(pkg_list, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
178 |
self.__progresstracker, |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
179 |
self.__check_cancelation, noexecute, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
180 |
filters=filters, verbose=verbose) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
181 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
182 |
assert self.__img.imageplan |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
183 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
184 |
if self.__canceling: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
185 |
raise api_errors.CanceledException() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
186 |
self.__set_can_be_canceled(False) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
187 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
188 |
if not noexecute: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
189 |
self.__plan_type = self.__INSTALL |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
190 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
191 |
self.__plan_desc = PlanDescription( |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
192 |
self.__img.imageplan) |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
193 |
if self.__img.imageplan.nothingtodo() or \ |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
194 |
noexecute: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
195 |
self.log_operation_end( |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
196 |
result=history.RESULT_NOTHING_TO_DO) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
197 |
self.__img.imageplan.update_index = update_index |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
198 |
res = not self.__img.imageplan.nothingtodo() |
716
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
199 |
except api_errors.PlanCreationException, e: |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
200 |
self.__set_history_PlanCreationException(e) |
716
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
201 |
self.__reset_unlock() |
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
202 |
raise |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
203 |
except (api_errors.CanceledException, fmri.IllegalFmri, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
204 |
Exception), e: |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
205 |
self.log_operation_end(error=e) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
206 |
self.__reset_unlock() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
207 |
raise |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
208 |
finally: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
209 |
self.__activity_lock.release() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
210 |
|
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
594
diff
changeset
|
211 |
return res, exception_caught |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
212 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
213 |
def plan_uninstall(self, pkg_list, recursive_removal, noexecute=False, |
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
594
diff
changeset
|
214 |
verbose=False, update_index=True): |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
215 |
"""Contructs a plan to uninstall the packages provided in |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
216 |
pkg_list. pkg_list is a list of packages to install. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
217 |
recursive_removal controls whether recursive removal is |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
218 |
allowed. noexecute determines whether the history will be |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
219 |
recorded after planning is finished. verbose controls whether |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
220 |
verbose debugging output will be printed to the terminal. Its |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
221 |
existence is temporary. If there are things to do to complete |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
222 |
the uninstall, it returns True, otherwise it returns False. It |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
223 |
can raise NonLeafPackageException and PlanCreationException.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
224 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
225 |
self.__activity_lock.acquire() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
226 |
try: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
227 |
self.__set_can_be_canceled(True) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
228 |
if self.__plan_type is not None: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
229 |
raise api_errors.PlanExistsException( |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
230 |
self.__plan_type) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
231 |
try: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
232 |
self.log_operation_start("uninstall") |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
233 |
self.__img.make_uninstall_plan(pkg_list, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
234 |
recursive_removal, self.__progresstracker, |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
235 |
self.__check_cancelation, noexecute, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
236 |
verbose=verbose) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
237 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
238 |
assert self.__img.imageplan |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
239 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
240 |
if self.__canceling: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
241 |
raise api_errors.CanceledException() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
242 |
self.__set_can_be_canceled(False) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
243 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
244 |
if not noexecute: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
245 |
self.__plan_type = self.__UNINSTALL |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
246 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
247 |
self.__plan_desc = PlanDescription( |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
248 |
self.__img.imageplan) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
249 |
if noexecute: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
250 |
self.log_operation_end( |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
251 |
result=history.RESULT_NOTHING_TO_DO) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
252 |
self.__img.imageplan.update_index = update_index |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
253 |
res = not self.__img.imageplan.nothingtodo() |
716
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
254 |
except api_errors.PlanCreationException, e: |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
255 |
self.__set_history_PlanCreationException(e) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
256 |
self.__reset_unlock() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
257 |
raise |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
258 |
except Exception, e: |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
259 |
self.log_operation_end(error=e) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
260 |
self.__reset_unlock() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
261 |
raise |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
262 |
except: |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
263 |
# Handle exceptions that are not subclasses of |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
264 |
# Exception. |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
265 |
exc_type, exc_value, exc_traceback = \ |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
266 |
sys.exc_info() |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
267 |
|
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
268 |
self.log_operation_end(error=exc_type) |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
269 |
self.__reset_unlock() |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
270 |
raise |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
271 |
finally: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
272 |
self.__activity_lock.release() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
273 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
274 |
return res |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
275 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
276 |
def plan_update_all(self, actual_cmd, refresh_catalogs=True, |
884
d780afc023ff
3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents:
838
diff
changeset
|
277 |
noexecute=False, force=False, verbose=False, update_index=True, |
d780afc023ff
3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents:
838
diff
changeset
|
278 |
be_name=None): |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
279 |
"""Creates a plan to update all packages on the system to the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
280 |
latest known versions. actual_cmd is the command used to start |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
281 |
the client. It is used to determine the image to check whether |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
282 |
SUNWipkg is up to date. refresh_catalogs controls whether the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
283 |
catalogs will automatically be refreshed. noexecute determines |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
284 |
whether the history will be recorded after planning is finished. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
285 |
force controls whether update should proceed even if ipkg is not |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
286 |
up to date. verbose controls whether verbose debugging output |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
287 |
will be printed to the terminal. Its existence is temporary. It |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
288 |
returns a tuple of three things. The first is a boolean which |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
289 |
tells the client whether there is anything to do. The second |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
290 |
tells whether the image is an opensolaris image. The third is |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
291 |
either None, or an exception which indicates partial success. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
292 |
This is currently used to indicate a failure in refreshing |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
293 |
catalogs. It can raise CatalogRefreshException, |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
294 |
IpkgOutOfDateException, PlanCreationException and |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
295 |
PermissionsException.""" |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
296 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
297 |
self.__activity_lock.acquire() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
298 |
try: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
299 |
self.__set_can_be_canceled(True) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
300 |
if self.__plan_type is not None: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
301 |
raise api_errors.PlanExistsException( |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
302 |
self.__plan_type) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
303 |
try: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
304 |
self.log_operation_start("image-update") |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
305 |
exception_caught = None |
1076
db86977aa656
8048 image update doesn't check to see if specified be-name already exists
Rich Burridge <rich.burridge@sun.com>
parents:
1072
diff
changeset
|
306 |
self.check_be_name(be_name) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
307 |
self.__be_name = be_name |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
308 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
309 |
# Verify validity of certificates before |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
310 |
# attempting network operations. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
311 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
312 |
self.__img.check_cert_validity() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
313 |
except api_errors.ExpiringCertificate, e: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
314 |
misc.emsg(e) |
625
e46b345645d6
3799 need to start progress tracker going early on
Brock Pytlik <bpytlik@sun.com>
parents:
615
diff
changeset
|
315 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
316 |
if refresh_catalogs: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
317 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
318 |
self.__img.refresh_publishers( |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
319 |
progtrack=self.__progresstracker) |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
320 |
except KeyboardInterrupt: |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
321 |
raise |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
322 |
except api_errors.InvalidDepotResponseException: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
323 |
raise |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
324 |
except: |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
325 |
# Since this is not a refresh |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
326 |
# that was explicitly requested, |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
327 |
# it doesn't matter if it fails. |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
328 |
pass |
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
329 |
else: |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
330 |
# If refresh wasn't called, the catalogs |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
331 |
# have to be manually loaded. |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
332 |
self.__img.load_catalogs( |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
333 |
self.__progresstracker) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
334 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
335 |
# If we can find SUNWipkg and SUNWcs in the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
336 |
# target image, then we assume this is a valid |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
337 |
# opensolaris image, and activate some |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
338 |
# special case behaviors. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
339 |
opensolaris_image = True |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
340 |
fmris, notfound, illegals = \ |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
341 |
self.__img.installed_fmris_from_args( |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
342 |
["SUNWipkg", "SUNWcs"]) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
343 |
assert(len(illegals) == 0) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
344 |
if notfound: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
345 |
opensolaris_image = False |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
346 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
347 |
if opensolaris_image and not force: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
348 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
349 |
if not self.__img.ipkg_is_up_to_date( |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
350 |
actual_cmd, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
351 |
self.__check_cancelation, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
352 |
noexecute, |
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
353 |
refresh_allowed=refresh_catalogs, |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
354 |
progtrack=self.__progresstracker): |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
355 |
error = api_errors.IpkgOutOfDateException() |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
356 |
self.log_operation_end(error=error) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
357 |
raise error |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
358 |
except api_errors.ImageNotFoundException: |
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
359 |
# Can't do anything in this |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
360 |
# case; so proceed. |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
361 |
pass |
655
6eef82185057
2325 optional dependency enforcement can't handle fmris disappearing from the catalog
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
625
diff
changeset
|
362 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
363 |
pkg_list = [ |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
364 |
ipkg.get_pkg_stem() |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
365 |
for ipkg in self.__img.gen_installed_pkgs() |
655
6eef82185057
2325 optional dependency enforcement can't handle fmris disappearing from the catalog
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
625
diff
changeset
|
366 |
] |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
367 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
368 |
self.__img.make_install_plan(pkg_list, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
369 |
self.__progresstracker, |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
370 |
self.__check_cancelation, |
1158
78582c4403a9
8616 operations should use same publisher when only non-preferred has package
Shawn Walker <srw@sun.com>
parents:
1150
diff
changeset
|
371 |
noexecute, verbose=verbose, |
78582c4403a9
8616 operations should use same publisher when only non-preferred has package
Shawn Walker <srw@sun.com>
parents:
1150
diff
changeset
|
372 |
multimatch_ignore=True) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
373 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
374 |
assert self.__img.imageplan |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
375 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
376 |
if self.__canceling: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
377 |
self.__reset_unlock() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
378 |
raise api_errors.CanceledException() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
379 |
self.__set_can_be_canceled(False) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
380 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
381 |
if not noexecute: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
382 |
self.__plan_type = self.__IMAGE_UPDATE |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
383 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
384 |
self.__plan_desc = PlanDescription( |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
385 |
self.__img.imageplan) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
386 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
387 |
if self.__img.imageplan.nothingtodo() or \ |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
388 |
noexecute: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
389 |
self.log_operation_end( |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
390 |
result=history.RESULT_NOTHING_TO_DO) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
391 |
self.__img.imageplan.update_index = update_index |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
392 |
res = not self.__img.imageplan.nothingtodo() |
716
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
393 |
except api_errors.PlanCreationException, e: |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
394 |
self.__set_history_PlanCreationException(e) |
716
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
395 |
self.__reset_unlock() |
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
396 |
raise |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
397 |
except api_errors.IpkgOutOfDateException: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
398 |
self.__reset_unlock() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
399 |
raise |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
400 |
except Exception, e: |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
401 |
self.log_operation_end(error=e) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
402 |
self.__reset_unlock() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
403 |
raise |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
404 |
except: |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
405 |
# Handle exceptions that are not subclasses of |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
406 |
# Exception. |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
407 |
exc_type, exc_value, exc_traceback = \ |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
408 |
sys.exc_info() |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
409 |
|
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
410 |
self.log_operation_end(error=exc_type) |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
411 |
self.__reset_unlock() |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
412 |
raise |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
413 |
finally: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
414 |
self.__activity_lock.release() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
415 |
|
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
594
diff
changeset
|
416 |
return res, opensolaris_image, exception_caught |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
417 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
418 |
def describe(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
419 |
"""Returns None if no plan is ready yet, otherwise returns |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
420 |
a PlanDescription""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
421 |
return self.__plan_desc |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
422 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
423 |
def prepare(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
424 |
"""Takes care of things which must be done before the plan |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
425 |
can be executed. This includes downloading the packages to |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
426 |
disk and preparing the indexes to be updated during |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
427 |
execution. It can raise ProblematicPermissionsIndexException, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
428 |
and PlanMissingException. Should only be called once a |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
429 |
plan_X method has been called.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
430 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
431 |
self.__activity_lock.acquire() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
432 |
self.__set_can_be_canceled(True) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
433 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
434 |
try: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
435 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
436 |
if not self.__img.imageplan: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
437 |
raise api_errors.PlanMissingException() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
438 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
439 |
if self.__prepared: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
440 |
raise api_errors.AlreadyPreparedException() |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
441 |
assert self.__plan_type == self.__INSTALL or \ |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
442 |
self.__plan_type == self.__UNINSTALL or \ |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
443 |
self.__plan_type == self.__IMAGE_UPDATE |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
444 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
445 |
self.__img.imageplan.preexecute() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
446 |
except search_errors.ProblematicPermissionsIndexException, e: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
447 |
self.__img.cleanup_downloads() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
448 |
raise api_errors.ProblematicPermissionsIndexException(e) |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
449 |
except: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
450 |
self.__img.cleanup_downloads() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
451 |
raise |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
452 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
453 |
if self.__canceling: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
454 |
self.__img.transport.reset() |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
455 |
self.__img.cleanup_downloads() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
456 |
raise api_errors.CanceledException() |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
457 |
self.__prepared = True |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
458 |
except Exception, e: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
459 |
if self.__img.history.operation_name: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
460 |
# If an operation is in progress, log |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
461 |
# the error and mark its end. |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
462 |
self.log_operation_end(error=e) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
463 |
raise |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
464 |
except: |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
465 |
# Handle exceptions that are not subclasses of |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
466 |
# Exception. |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
467 |
if self.__img.history.operation_name: |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
468 |
# If an operation is in progress, log |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
469 |
# the error and mark its end. |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
470 |
exc_type, exc_value, exc_traceback = \ |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
471 |
sys.exc_info() |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
472 |
self.log_operation_end(error=exc_type) |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
473 |
raise |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
474 |
finally: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
475 |
self.__set_can_be_canceled(False) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
476 |
self.__activity_lock.release() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
477 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
478 |
def execute_plan(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
479 |
"""Executes the plan. This is uncancelable one it begins. It |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
480 |
can raise CorruptedIndexException, |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
481 |
ProblematicPermissionsIndexException, ImageplanStateException, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
482 |
ImageUpdateOnLiveImageException, and PlanMissingException. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
483 |
Should only be called after the prepare method has been |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
484 |
called.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
485 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
486 |
self.__activity_lock.acquire() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
487 |
self.__set_can_be_canceled(False) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
488 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
489 |
if not self.__img.imageplan: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
490 |
raise api_errors.PlanMissingException() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
491 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
492 |
if not self.__prepared: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
493 |
raise api_errors.PrematureExecutionException() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
494 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
495 |
if self.__executed: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
496 |
raise api_errors.AlreadyExecutedException() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
497 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
498 |
assert self.__plan_type == self.__INSTALL or \ |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
499 |
self.__plan_type == self.__UNINSTALL or \ |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
500 |
self.__plan_type == self.__IMAGE_UPDATE |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
501 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
502 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
503 |
be = bootenv.BootEnv(self.__img.get_root()) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
504 |
except RuntimeError: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
505 |
be = bootenv.BootEnvNull(self.__img.get_root()) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
506 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
507 |
if self.__plan_type is self.__IMAGE_UPDATE: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
508 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
509 |
be.init_image_recovery(self.__img, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
510 |
self.__be_name) |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
511 |
except Exception, e: |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
512 |
self.log_operation_end(error=e) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
513 |
raise |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
514 |
except: |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
515 |
# Handle exceptions that are not |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
516 |
# subclasses of Exception. |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
517 |
exc_type, exc_value, exc_traceback = \ |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
518 |
sys.exc_info() |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
519 |
self.log_operation_end(error=exc_type) |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
520 |
raise |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
521 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
522 |
if self.__img.is_liveroot(): |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
523 |
e = api_errors.ImageUpdateOnLiveImageException() |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
524 |
self.log_operation_end(error=e) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
525 |
raise e |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
526 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
527 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
528 |
self.__img.imageplan.execute() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
529 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
530 |
if self.__plan_type is self.__IMAGE_UPDATE: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
531 |
be.activate_image() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
532 |
else: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
533 |
be.activate_install_uninstall() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
534 |
ret_code = 0 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
535 |
except RuntimeError, e: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
536 |
if self.__plan_type is self.__IMAGE_UPDATE: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
537 |
be.restore_image() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
538 |
else: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
539 |
be.restore_install_uninstall() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
540 |
# Must be done after bootenv restore. |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
541 |
self.log_operation_end(error=e) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
542 |
self.__img.cleanup_downloads() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
543 |
raise |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
544 |
except search_errors.ProblematicPermissionsIndexException, e: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
545 |
error = api_errors.ProblematicPermissionsIndexException(e) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
546 |
self.log_operation_end(error=error) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
547 |
self.__img.cleanup_downloads() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
548 |
raise error |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
549 |
except (search_errors.InconsistentIndexException, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
550 |
search_errors.PartialIndexingException), e: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
551 |
error = api_errors.CorruptedIndexException(e) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
552 |
self.log_operation_end(error=error) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
553 |
self.__img.cleanup_downloads() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
554 |
raise error |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
555 |
except search_errors.MainDictParsingException, e: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
556 |
error = api_errors.MainDictParsingException(e) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
557 |
self.log_operation_end(error=error) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
558 |
self.__img.cleanup_downloads() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
559 |
raise error |
1019
e61c57c724c9
7663 disable_fmri should be synchronous
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
996
diff
changeset
|
560 |
except actuator.NonzeroExitException, e: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
561 |
# Won't happen during image-update |
1019
e61c57c724c9
7663 disable_fmri should be synchronous
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
996
diff
changeset
|
562 |
be.restore_install_uninstall() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
563 |
error = api_errors.ActuatorException(e) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
564 |
self.__img.cleanup_downloads() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
565 |
self.log_operation_end(error=error) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
566 |
raise error |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
567 |
except Exception, e: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
568 |
if self.__plan_type is self.__IMAGE_UPDATE: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
569 |
be.restore_image() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
570 |
else: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
571 |
be.restore_install_uninstall() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
572 |
# Must be done after bootenv restore. |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
573 |
self.log_operation_end(error=e) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
574 |
self.__img.cleanup_downloads() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
575 |
raise |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
576 |
except: |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
577 |
# Handle exceptions that are not subclasses of |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
578 |
# Exception. |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
579 |
exc_type, exc_value, exc_traceback = \ |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
580 |
sys.exc_info() |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
581 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
582 |
if self.__plan_type is self.__IMAGE_UPDATE: |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
583 |
be.restore_image() |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
584 |
else: |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
585 |
be.restore_install_uninstall() |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
586 |
# Must be done after bootenv restore. |
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
587 |
self.log_operation_end(error=exc_type) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
588 |
self.__img.cleanup_downloads() |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
589 |
raise |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
590 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
591 |
if self.__img.imageplan.state != EXECUTED_OK: |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
592 |
if self.__plan_type is self.__IMAGE_UPDATE: |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
593 |
be.restore_image() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
594 |
else: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
595 |
be.restore_install_uninstall() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
596 |
|
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
597 |
error = api_errors.ImageplanStateException( |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
598 |
self.__img.imageplan.state) |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
599 |
# Must be done after bootenv restore. |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
600 |
self.log_operation_end(error=error) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
601 |
raise error |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
602 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
603 |
self.__img.cleanup_downloads() |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
604 |
self.__img.cleanup_cached_content() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
605 |
|
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
606 |
# If the end of the operation wasn't already logged |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
607 |
# by one of the above operations, then log it as |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
608 |
# ending now. |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
609 |
if self.__img.history.operation_name: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
610 |
self.log_operation_end() |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
611 |
self.__executed = True |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
612 |
try: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
613 |
if int(os.environ.get("PKG_DUMP_STATS", 0)) > 0: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
614 |
self.__img.transport.stats.dump() |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
615 |
except ValueError: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
616 |
# Don't generate stats if an invalid value |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
617 |
# is supplied. |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
618 |
pass |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
619 |
finally: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
620 |
self.__activity_lock.release() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
621 |
|
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
622 |
def __refresh(self, full_refresh=False, pubs=None, immediate=False, |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
623 |
validate=True): |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
624 |
"""Private refresh method that exposes functionality not |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
625 |
suitable for external consumers.""" |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
626 |
|
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
627 |
self.__activity_lock.acquire() |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
628 |
self.__set_can_be_canceled(False) |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
629 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
630 |
self.__img.refresh_publishers(full_refresh=full_refresh, |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
631 |
immediate=immediate, pubs=pubs, |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
632 |
progtrack=self.__progresstracker, validate=validate) |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
633 |
return self.__img |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
634 |
finally: |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
635 |
self.__activity_lock.release() |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
636 |
|
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
637 |
def refresh(self, full_refresh=False, pubs=None, immediate=False): |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
638 |
"""Refreshes the metadata (e.g. catalog) for one or more |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
639 |
publishers. |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
640 |
|
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
641 |
'full_refresh' is an optional boolean value indicating whether |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
642 |
a full retrieval of publisher metadata (e.g. catalogs) or only |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
643 |
an update to the existing metadata should be performed. When |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
644 |
True, 'immediate' is also set to True. |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
645 |
|
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
646 |
'pubs' is a list of publisher prefixes or publisher objects |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
647 |
to refresh. Passing an empty list or using the default value |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
648 |
implies all publishers. |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
649 |
|
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
650 |
'immediate' is an optional boolean value indicating whether the |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
651 |
a refresh should occur now. If False, a publisher's selected |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
652 |
repository will only be checked for updates if the update |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
653 |
interval period recorded in the image configuration has been |
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
654 |
exceeded; ignored when 'full_refresh' is True. |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
655 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
656 |
Currently returns an image object, allowing existing code to |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
657 |
work while the rest of the API is put into place.""" |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
658 |
|
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
659 |
return self.__refresh(full_refresh=full_refresh, pubs=pubs, |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
660 |
immediate=immediate) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
661 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
662 |
def __licenses(self, mfst, local): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
663 |
"""Private function. Returns the license info from the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
664 |
manifest mfst. Local controls whether the information is |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
665 |
retrieved locally.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
666 |
license_lst = [] |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
667 |
for lic in mfst.gen_actions_by_type("license"): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
668 |
if not local: |
1072
66ce6aa346d7
8132 __licenses should use StringIO
Rich Burridge <rich.burridge@sun.com>
parents:
1053
diff
changeset
|
669 |
s = StringIO.StringIO() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
670 |
hash_val = misc.gunzip_from_stream( |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
671 |
lic.get_remote_opener(self.__img, |
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
672 |
mfst.fmri)(), s) |
1072
66ce6aa346d7
8132 __licenses should use StringIO
Rich Burridge <rich.burridge@sun.com>
parents:
1053
diff
changeset
|
673 |
text = s.getvalue() |
66ce6aa346d7
8132 __licenses should use StringIO
Rich Burridge <rich.burridge@sun.com>
parents:
1053
diff
changeset
|
674 |
s.close() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
675 |
else: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
676 |
text = lic.get_local_opener(self.__img, |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
677 |
mfst.fmri)().read()[:-1] |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
678 |
license_lst.append(LicenseInfo(text)) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
679 |
return license_lst |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
680 |
|
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
681 |
def info(self, fmri_strings, local, info_needed): |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
682 |
"""Gathers information about fmris. fmri_strings is a list |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
683 |
of fmri_names for which information is desired. local |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
684 |
determines whether to retrieve the information locally. It |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
685 |
returns a dictionary of lists. The keys for the dictionary are |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
686 |
the constants specified in the class definition. The values are |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
687 |
lists of PackageInfo objects or strings.""" |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
688 |
|
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
689 |
# Currently, this is mostly a wapper for activity locking. |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
690 |
self.__activity_lock.acquire() |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
691 |
try: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
692 |
i = self._info_op(fmri_strings, local, info_needed) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
693 |
finally: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
694 |
self.__activity_lock.release() |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
695 |
|
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
696 |
return i |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
697 |
|
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
698 |
def _info_op(self, fmri_strings, local, info_needed): |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
699 |
"""Performs the actual info operation. The external |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
700 |
interface to the API's consumers is defined in info().""" |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
701 |
|
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
702 |
bad_opts = info_needed - PackageInfo.ALL_OPTIONS |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
703 |
if bad_opts: |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
704 |
raise api_errors.UnrecognizedOptionsToInfo(bad_opts) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
705 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
706 |
self.log_operation_start("info") |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
707 |
self.__img.load_catalogs(self.__progresstracker) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
708 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
709 |
fmris = [] |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
710 |
notfound = [] |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
711 |
multiple_matches = [] |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
712 |
illegals = [] |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
713 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
714 |
if local: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
715 |
fmris, notfound, illegals = \ |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
716 |
self.__img.installed_fmris_from_args(fmri_strings) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
717 |
if not fmris and not notfound and not illegals: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
718 |
self.log_operation_end( |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
719 |
result=history.RESULT_NOTHING_TO_DO) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
720 |
raise api_errors.NoPackagesInstalledException() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
721 |
else: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
722 |
# Verify validity of certificates before attempting |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
723 |
# network operations. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
724 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
725 |
self.__img.check_cert_validity() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
726 |
except api_errors.ExpiringCertificate, e: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
727 |
misc.emsg(e) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
728 |
except api_errors.CertificateError, e: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
729 |
self.log_operation_end(error=e) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
730 |
raise |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
731 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
732 |
# XXX This loop really needs not to be copied from |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
733 |
# Image.make_install_plan()! |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
734 |
for p in fmri_strings: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
735 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
736 |
matches = list(self.__img.inventory([p], |
1045
62656c214151
8135 plan creation could be faster for install and uninstall
Shawn Walker <srw@sun.com>
parents:
1044
diff
changeset
|
737 |
all_known=True, ordered=False)) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
738 |
except api_errors.InventoryException, e: |
707
d37b19989de2
4878 pkg info traceback when given invalid input
Brock Pytlik <bpytlik@sun.com>
parents:
696
diff
changeset
|
739 |
assert(len(e.notfound) == 1 or \ |
d37b19989de2
4878 pkg info traceback when given invalid input
Brock Pytlik <bpytlik@sun.com>
parents:
696
diff
changeset
|
740 |
len(e.illegal) == 1) |
d37b19989de2
4878 pkg info traceback when given invalid input
Brock Pytlik <bpytlik@sun.com>
parents:
696
diff
changeset
|
741 |
if e.notfound: |
d37b19989de2
4878 pkg info traceback when given invalid input
Brock Pytlik <bpytlik@sun.com>
parents:
696
diff
changeset
|
742 |
notfound.append(e.notfound[0]) |
d37b19989de2
4878 pkg info traceback when given invalid input
Brock Pytlik <bpytlik@sun.com>
parents:
696
diff
changeset
|
743 |
else: |
d37b19989de2
4878 pkg info traceback when given invalid input
Brock Pytlik <bpytlik@sun.com>
parents:
696
diff
changeset
|
744 |
illegals.append(e.illegal[0]) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
745 |
err = 1 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
746 |
continue |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
747 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
748 |
pnames = {} |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
749 |
pmatch = [] |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
750 |
npnames = {} |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
751 |
npmatch = [] |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
752 |
for m, state in matches: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
753 |
if m.preferred_publisher(): |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
754 |
pnames[m.get_pkg_stem()] = 1 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
755 |
pmatch.append(m) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
756 |
else: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
757 |
npnames[m.get_pkg_stem()] = 1 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
758 |
npmatch.append(m) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
759 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
760 |
if len(pnames.keys()) > 1: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
761 |
multiple_matches.append( |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
762 |
(p, pnames.keys())) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
763 |
error = 1 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
764 |
continue |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
765 |
elif len(pnames.keys()) < 1 and \ |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
766 |
len(npnames.keys()) > 1: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
767 |
multiple_matches.append( |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
768 |
(p, pnames.keys())) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
769 |
error = 1 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
770 |
continue |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
771 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
772 |
# matches is a list reverse sorted by version, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
773 |
# so take the first; i.e., the latest. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
774 |
if len(pmatch) > 0: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
775 |
fmris.append(pmatch[0]) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
776 |
else: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
777 |
fmris.append(npmatch[0]) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
778 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
779 |
pis = [] |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
780 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
781 |
for f in fmris: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
782 |
pub = name = version = release = None |
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
783 |
build_release = branch = packaging_date = None |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
784 |
if PackageInfo.IDENTITY in info_needed: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
785 |
pub, name, version = f.tuple() |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
786 |
pub = fmri.strip_pub_pfx(pub) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
787 |
release = version.release |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
788 |
build_release = version.build_release |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
789 |
branch = version.branch |
1150
2b8aaf0b0b4e
4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents:
1141
diff
changeset
|
790 |
packaging_date = \ |
2b8aaf0b0b4e
4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents:
1141
diff
changeset
|
791 |
version.get_timestamp().strftime("%c") |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
792 |
pref_pub = None |
938
eeb932b9b44e
7336 putback for 5871 missed a few vestiges of authority
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
926
diff
changeset
|
793 |
if PackageInfo.PREF_PUBLISHER in info_needed: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
794 |
pref_pub = False |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
795 |
if f.preferred_publisher(): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
796 |
pref_pub = True |
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
797 |
state = None |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
798 |
if PackageInfo.STATE in info_needed: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
799 |
if self.__img.is_installed(f): |
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
800 |
state = PackageInfo.INSTALLED |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
801 |
else: |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
802 |
state = PackageInfo.NOT_INSTALLED |
615
aeeeb9f31173
4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents:
610
diff
changeset
|
803 |
links = hardlinks = files = dirs = dependencies = None |
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
804 |
summary = size = licenses = cat_info = None |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
805 |
|
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
806 |
if (frozenset([PackageInfo.SIZE, PackageInfo.LICENSES, |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
807 |
PackageInfo.SUMMARY, PackageInfo.CATEGORIES]) | |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
808 |
PackageInfo.ACTION_OPTIONS) & info_needed: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
809 |
mfst = self.__img.get_manifest(f) |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
810 |
excludes = self.__img.list_excludes() |
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
811 |
if PackageInfo.SIZE in info_needed: |
1044
046981c42149
8102 pkg.client.api info reports size of zero for packages with cached manifests
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
1032
diff
changeset
|
812 |
size = mfst.get_size(excludes=excludes) |
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
813 |
if PackageInfo.LICENSES in info_needed: |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
814 |
licenses = self.__licenses(mfst, local) |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
815 |
if PackageInfo.SUMMARY in info_needed: |
1140
b2aee412ba0d
4395 Use pkg.summary for "pkg info" output
Rich Burridge <rich.burridge@sun.com>
parents:
1130
diff
changeset
|
816 |
summary = mfst.get("pkg.summary", |
b2aee412ba0d
4395 Use pkg.summary for "pkg info" output
Rich Burridge <rich.burridge@sun.com>
parents:
1130
diff
changeset
|
817 |
mfst.get("description", "")) |
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
818 |
|
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
819 |
if PackageInfo.ACTION_OPTIONS & info_needed: |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
820 |
if PackageInfo.LINKS in info_needed: |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
821 |
links = list( |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
822 |
mfst.gen_key_attribute_value_by_type( |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
823 |
"link", excludes)) |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
824 |
if PackageInfo.HARDLINKS in info_needed: |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
825 |
hardlinks = list( |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
826 |
mfst.gen_key_attribute_value_by_type( |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
827 |
"hardlink", excludes)) |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
828 |
if PackageInfo.FILES in info_needed: |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
829 |
files = list( |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
830 |
mfst.gen_key_attribute_value_by_type( |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
831 |
"file", excludes)) |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
832 |
if PackageInfo.DIRS in info_needed: |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
833 |
dirs = list( |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
834 |
mfst.gen_key_attribute_value_by_type( |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
835 |
"dir", excludes)) |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
836 |
if PackageInfo.DEPENDENCIES in \ |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
837 |
info_needed: |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
838 |
dependencies = list( |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
839 |
mfst.gen_key_attribute_value_by_type( |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
840 |
"depend", excludes)) |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
841 |
|
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
842 |
if PackageInfo.CATEGORIES in info_needed: |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
843 |
cat_info = [ |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
844 |
PackageCategory(scheme, cat) |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
845 |
for ca |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
846 |
in mfst.gen_actions_by_type("set") |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
847 |
if ca.has_category_info() |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
848 |
for scheme, cat |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
849 |
in ca.parse_category_info() |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
850 |
] |
615
aeeeb9f31173
4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents:
610
diff
changeset
|
851 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
852 |
pis.append(PackageInfo(pkg_stem=name, summary=summary, |
688
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
853 |
category_info_list=cat_info, state=state, |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
854 |
publisher=pub, preferred_publisher=pref_pub, |
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
855 |
version=release, build_release=build_release, |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
856 |
branch=branch, packaging_date=packaging_date, |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
857 |
size=size, pfmri=str(f), licenses=licenses, |
615
aeeeb9f31173
4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents:
610
diff
changeset
|
858 |
links=links, hardlinks=hardlinks, files=files, |
aeeeb9f31173
4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents:
610
diff
changeset
|
859 |
dirs=dirs, dependencies=dependencies)) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
860 |
if pis: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
861 |
self.log_operation_end() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
862 |
elif illegals or multiple_matches: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
863 |
self.log_operation_end( |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
864 |
result=history.RESULT_FAILED_BAD_REQUEST) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
865 |
else: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
866 |
self.log_operation_end( |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
867 |
result=history.RESULT_NOTHING_TO_DO) |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
868 |
return { |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
869 |
self.INFO_FOUND: pis, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
870 |
self.INFO_MISSING: notfound, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
871 |
self.INFO_MULTI_MATCH: multiple_matches, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
872 |
self.INFO_ILLEGALS: illegals |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
873 |
} |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
874 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
875 |
def can_be_canceled(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
876 |
"""Returns true if the API is in a cancelable state.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
877 |
return self.__can_be_canceled |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
878 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
879 |
def __set_can_be_canceled(self, status): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
880 |
"""Private method. Handles the details of changing the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
881 |
cancelable state.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
882 |
if self.__can_be_canceled != status: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
883 |
self.__can_be_canceled = status |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
884 |
if self.__cancel_state_callable: |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
885 |
self.__cancel_state_callable( |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
886 |
self.__can_be_canceled) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
887 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
888 |
def reset(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
889 |
"""Resets the API back the the initial state. Note: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
890 |
this does not necessarily return the disk to its initial state |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
891 |
since the indexes or download cache may have been changed by |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
892 |
the prepare method.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
893 |
self.__activity_lock.acquire() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
894 |
self.__reset_unlock() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
895 |
self.__activity_lock.release() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
896 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
897 |
def __reset_unlock(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
898 |
"""Private method. Provides a way to reset without taking the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
899 |
activity lock. Should only be called by a thread which already |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
900 |
holds the activity lock.""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
901 |
|
1242
f6aa06e1c391
6758 api should recreate image object on reset
Shawn Walker <srw@sun.com>
parents:
1240
diff
changeset
|
902 |
# Recreate the image object using the path the api |
f6aa06e1c391
6758 api should recreate image object on reset
Shawn Walker <srw@sun.com>
parents:
1240
diff
changeset
|
903 |
# object was created with instead of the current path. |
f6aa06e1c391
6758 api should recreate image object on reset
Shawn Walker <srw@sun.com>
parents:
1240
diff
changeset
|
904 |
self.__img = image.Image() |
f6aa06e1c391
6758 api should recreate image object on reset
Shawn Walker <srw@sun.com>
parents:
1240
diff
changeset
|
905 |
self.__img.find_root(self.__img_path) |
f6aa06e1c391
6758 api should recreate image object on reset
Shawn Walker <srw@sun.com>
parents:
1240
diff
changeset
|
906 |
self.__img.load_config() |
f6aa06e1c391
6758 api should recreate image object on reset
Shawn Walker <srw@sun.com>
parents:
1240
diff
changeset
|
907 |
|
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
908 |
self.__plan_desc = None |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
909 |
self.__plan_type = None |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
910 |
self.__prepared = False |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
911 |
self.__executed = False |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
912 |
self.__be_name = None |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
913 |
self.__set_can_be_canceled(False) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
914 |
self.__canceling = False |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
915 |
self.__progresstracker.reset() |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
916 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
917 |
def __check_cancelation(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
918 |
"""Private method. Provides a callback method for internal |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
919 |
code to use to determine whether the current action has been |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
920 |
canceled.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
921 |
return self.__canceling |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
922 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
923 |
def cancel(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
924 |
"""Used for asynchronous cancelation. It returns the API |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
925 |
to the state it was in prior to the current method being |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
926 |
invoked. Canceling during a plan phase returns the API to |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
927 |
its initial state. Canceling during prepare puts the API |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
928 |
into the state it was in just after planning had completed. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
929 |
Plan execution cannot be canceled. A call to this method blocks |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
930 |
until the canelation has happened. Note: this does not |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
931 |
necessarily return the disk to its initial state since the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
932 |
indexes or download cache may have been changed by the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
933 |
prepare method.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
934 |
if not self.__can_be_canceled: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
935 |
return False |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
936 |
self.__set_can_be_canceled(False) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
937 |
self.__canceling = True |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
938 |
# The lock is taken here to make the call block, until |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
939 |
# the activity has been canceled. |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
940 |
self.__activity_lock.acquire() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
941 |
self.__activity_lock.release() |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
942 |
self.__canceling = False |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
943 |
return True |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
944 |
|
716
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
945 |
def __set_history_PlanCreationException(self, e): |
1141
a74d6815a7fc
4178 unfound_fmris is a poor name
Rich Burridge <rich.burridge@sun.com>
parents:
1140
diff
changeset
|
946 |
if e.unmatched_fmris or e.multiple_matches or \ |
716
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
947 |
e.missing_matches or e.illegal: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
948 |
self.log_operation_end(error=e, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
949 |
result=history.RESULT_FAILED_BAD_REQUEST) |
716
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
950 |
elif e.constraint_violations: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
951 |
self.log_operation_end(error=e, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
952 |
result=history.RESULT_FAILED_CONSTRAINED) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
953 |
else: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
954 |
self.log_operation_end(error=e) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
955 |
|
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
956 |
def local_search(self, query_lst): |
1100
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
957 |
"""local_search takes a list of Query objects and performs |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
958 |
each query against the installed packages of the image.""" |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
959 |
|
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
960 |
for i, q in enumerate(query_lst): |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
961 |
l = query_p.QueryLexer() |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
962 |
l.build() |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
963 |
qp = query_p.QueryParser(l) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
964 |
try: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
965 |
query = qp.parse(q.encoded_text()) |
1053
00fe9773d072
8098 parsing errors should not cause a stacktrace
Brock Pytlik <bpytlik@sun.com>
parents:
1051
diff
changeset
|
966 |
except query_p.BooleanQueryException, e: |
00fe9773d072
8098 parsing errors should not cause a stacktrace
Brock Pytlik <bpytlik@sun.com>
parents:
1051
diff
changeset
|
967 |
raise api_errors.BooleanQueryException(e) |
00fe9773d072
8098 parsing errors should not cause a stacktrace
Brock Pytlik <bpytlik@sun.com>
parents:
1051
diff
changeset
|
968 |
except query_p.ParseError, e: |
00fe9773d072
8098 parsing errors should not cause a stacktrace
Brock Pytlik <bpytlik@sun.com>
parents:
1051
diff
changeset
|
969 |
raise api_errors.ParseError(e) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
970 |
self.__img.update_index_dir() |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
971 |
assert self.__img.index_dir |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
972 |
try: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
973 |
query.set_info(q.num_to_return, q.start_point, |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
974 |
self.__img.index_dir, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
975 |
self.__img.get_manifest_path, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
976 |
self.__img.gen_installed_pkg_names, |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
977 |
q.case_sensitive) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
978 |
excludes = [variant.Variants( |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
979 |
{"variant.arch": self.__img.get_arch()} |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
980 |
).allow_action] |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
981 |
res = query.search(self.__img.gen_installed_pkgs, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
982 |
self.__img.get_manifest_path, excludes) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
983 |
except search_errors.InconsistentIndexException, e: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
984 |
raise api_errors.InconsistentIndexException(e) |
1100
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
985 |
# i is being inserted to track which query the results |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
986 |
# are for. None is being inserted since there is no |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
987 |
# publisher being searched against. |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
988 |
return ((i, None, r) for r in res) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
989 |
|
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
990 |
@staticmethod |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
991 |
def __parse_v_0(line, pub, v): |
1100
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
992 |
"""This function parses the string returned by a version 0 |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
993 |
search server and puts it into the expected format of |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
994 |
(query_number, publisher, (version, return_type, (results))). |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
995 |
|
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
996 |
"query_number" in the return value is fixed at 0 since search |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
997 |
v0 servers cannot accept multiple queries in a single HTTP |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
998 |
request.""" |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
999 |
|
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1000 |
line = line.strip() |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1001 |
fields = line.split(None, 3) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1002 |
return (0, pub, (v, Query.RETURN_ACTIONS, (fields[:4]))) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1003 |
|
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1004 |
@staticmethod |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1005 |
def __parse_v_1(line, pub, v): |
1100
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1006 |
"""This function parses the string returned by a version 1 |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1007 |
search server and puts it into the expected format of |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1008 |
(query_number, publisher, (version, return_type, (results))) |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1009 |
If it receives a line it can't parse, it raises a |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1010 |
ServerReturnError.""" |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1011 |
|
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1012 |
fields = line.split(None, 2) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1013 |
if len(fields) != 3: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1014 |
raise api_errors.ServerReturnError(line) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1015 |
try: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1016 |
return_type = int(fields[1]) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1017 |
except ValueError: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1018 |
raise api_errors.ServerReturnError(line) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1019 |
if return_type == Query.RETURN_ACTIONS: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1020 |
subfields = fields[2].split(None, 2) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1021 |
return (fields[0], pub, (v, return_type, |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1022 |
(subfields[0], urllib.unquote(subfields[1]), |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1023 |
subfields[2]))) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1024 |
elif return_type == Query.RETURN_PACKAGES: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1025 |
return (fields[0], pub, (v, return_type, fields[2])) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1026 |
else: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1027 |
raise api_errors.ServerReturnError(line) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1028 |
|
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1029 |
def remote_search(self, query_str_and_args_lst, servers=None): |
1100
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1030 |
"""This function takes a list of Query objects, and optionally |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1031 |
a list of servers to search against. It performs each query |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1032 |
against each server and yields the results in turn. If no |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1033 |
servers are provided, the search is conducted against all |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1034 |
active servers known by the image. |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1035 |
|
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1036 |
The servers argument is a list of servers in two possible |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1037 |
forms: the old deprecated form of a publisher, in a |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1038 |
dictionary, or a Publisher object. """ |
1100
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1039 |
|
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1040 |
failed = [] |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1041 |
invalid = [] |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1042 |
unsupported = [] |
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
1043 |
|
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1044 |
if not servers: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1045 |
servers = self.__img.gen_publishers() |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1046 |
|
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1047 |
for pub in servers: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1048 |
descriptive_name = None |
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
1049 |
|
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1050 |
if isinstance(pub, dict): |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1051 |
origin = pub["origin"] |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1052 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1053 |
pub = self.__img.get_publisher( |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1054 |
origin=origin) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1055 |
except api_errors.UnknownPublisher: |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1056 |
pub = publisher.RepositoryURI(origin) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1057 |
descriptive_name = origin |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1058 |
|
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1059 |
if not descriptive_name: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1060 |
descriptive_name = pub.prefix |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1061 |
|
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1062 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1063 |
res = self.__img.transport.do_search(pub, |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1064 |
query_str_and_args_lst) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1065 |
except api_errors.NegativeSearchResult: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1066 |
continue |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1067 |
except api_errors.TransportError, e: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1068 |
failed.append((descriptive_name, e)) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1069 |
continue |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1070 |
except api_errors.UnsupportedSearchError, e: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1071 |
unsupported.append((descriptive_name, e)) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1072 |
continue |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1073 |
except api_errors.MalformedSearchRequest, e: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1074 |
ex = self._validate_search( |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1075 |
query_str_and_args_lst) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1076 |
if ex: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1077 |
raise ex |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1078 |
failed.append((descriptive_name, e)) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1079 |
continue |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1080 |
|
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1081 |
try: |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1082 |
if not self.validate_response(res, 1): |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1083 |
invalid.append(descriptive_name) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1084 |
continue |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1085 |
for line in res: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1086 |
yield self.__parse_v_1(line, pub, 1) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1087 |
except api_errors.TransportError, e: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1088 |
failed.append((descriptive_name, e)) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1089 |
continue |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1090 |
|
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1091 |
if failed or invalid or unsupported: |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1092 |
raise api_errors.ProblematicSearchServers(failed, |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1093 |
invalid, unsupported) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1094 |
|
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1095 |
def _validate_search(self, query_str_lst): |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1096 |
"""Called by remote search if server responds that the |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1097 |
request was invalid. In this case, parse the query on |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1098 |
the client-side and determine what went wrong.""" |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1099 |
|
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1100 |
for q in query_str_lst: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1101 |
l = query_p.QueryLexer() |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1102 |
l.build() |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1103 |
qp = query_p.QueryParser(l) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1104 |
try: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1105 |
query = qp.parse(q.encoded_text()) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1106 |
except query_p.BooleanQueryException, e: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1107 |
return api_errors.BooleanQueryException(e) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1108 |
except query_p.ParseError, e: |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1109 |
return api_errors.ParseError(e) |
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1110 |
|
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1158
diff
changeset
|
1111 |
return None |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1112 |
|
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1113 |
def rebuild_search_index(self): |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1114 |
"""Rebuilds the search indexes. Removes all |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1115 |
existing indexes and replaces them from scratch rather than |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1116 |
performing the incremental update which is usually used. |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1117 |
This is useful for times when the index for the client has |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1118 |
been corrupted.""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1119 |
self.__img.update_index_dir() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
1120 |
self.log_operation_start("rebuild-index") |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1121 |
if not os.path.isdir(self.__img.index_dir): |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1122 |
self.__img.mkdirs() |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1123 |
try: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1124 |
excludes = [variant.Variants( |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1125 |
{"variant.arch": self.__img.get_arch()}).allow_action] |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1126 |
ind = indexer.Indexer(self.__img, self.__img.get_manifest, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1127 |
self.__img.get_manifest_path, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1128 |
self.__progresstracker, excludes) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1129 |
ind.rebuild_index_from_scratch( |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1130 |
self.__img.gen_installed_pkgs()) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1131 |
except search_errors.ProblematicPermissionsIndexException, e: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
1132 |
error = api_errors.ProblematicPermissionsIndexException(e) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
1133 |
self.log_operation_end(error=error) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
1134 |
raise error |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1135 |
except search_errors.MainDictParsingException, e: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
1136 |
error = api_errors.MainDictParsingException(e) |
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
1137 |
self.log_operation_end(error=error) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1138 |
self.__img.cleanup_downloads() |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
1139 |
raise error |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1140 |
else: |
1027
e827313523d8
7774 image history discarded when bootenv operations fail or succeed
Shawn Walker <srw@sun.com>
parents:
1019
diff
changeset
|
1141 |
self.log_operation_end() |
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
1142 |
|
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1143 |
@staticmethod |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1144 |
def validate_response(res, v): |
1100
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1145 |
"""This function is used to determine whether the first |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1146 |
line returned from a server is expected. This ensures that |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1147 |
search is really communicating with a search-enabled server.""" |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1148 |
|
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1149 |
try: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1150 |
s = res.next() |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1151 |
return s == Query.VALIDATION_STRING[v] |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1152 |
except StopIteration: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1153 |
return False |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1154 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1155 |
def add_publisher(self, pub, refresh_allowed=True): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1156 |
"""Add the provided publisher object to the image |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1157 |
configuration.""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1158 |
self.__img.add_publisher(pub, refresh_allowed=refresh_allowed, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1159 |
progtrack=self.__progresstracker) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1160 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1161 |
def get_preferred_publisher(self): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1162 |
"""Returns the preferred publisher object for the image.""" |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1163 |
return self.get_publisher( |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1164 |
prefix=self.__img.get_preferred_publisher()) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1165 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1166 |
def get_publisher(self, prefix=None, alias=None, duplicate=False): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1167 |
"""Retrieves a publisher object matching the provided prefix |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1168 |
(name) or alias. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1169 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1170 |
'duplicate' is an optional boolean value indicating whether |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1171 |
a copy of the publisher object should be returned instead |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1172 |
of the original. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1173 |
""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1174 |
pub = self.__img.get_publisher(prefix=prefix, alias=alias) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1175 |
if duplicate: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1176 |
# Never return the original so that changes to the |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1177 |
# retrieved object are not reflected until |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1178 |
# update_publisher is called. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1179 |
return copy.copy(pub) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1180 |
return pub |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1181 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1182 |
def get_publishers(self, duplicate=False): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1183 |
"""Returns a list of the publisher objects for the current |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1184 |
image. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1185 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1186 |
'duplicate' is an optional boolean value indicating whether |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1187 |
copies of the publisher objects should be returned instead |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1188 |
of the originals. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1189 |
""" |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1190 |
if duplicate: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1191 |
# Return a copy so that changes to the retrieved objects |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1192 |
# are not reflected until update_publisher is called. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1193 |
pubs = [ |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1194 |
copy.copy(p) |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1195 |
for p in self.__img.get_publishers().values() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1196 |
] |
716
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
1197 |
else: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1198 |
pubs = self.__img.get_publishers().values() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1199 |
return misc.get_sorted_publishers(pubs, |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1200 |
preferred=self.__img.get_preferred_publisher()) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1201 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1202 |
def get_publisher_last_update_time(self, prefix=None, alias=None): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1203 |
"""Returns a datetime object representing the last time the |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1204 |
catalog for a publisher was modified or None.""" |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1205 |
if alias: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1206 |
prefix = self.get_publisher(alias=alias).prefix |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1207 |
dt = None |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1208 |
self.__activity_lock.acquire() |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1209 |
try: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1210 |
self.__set_can_be_canceled(True) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1211 |
try: |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1212 |
dt = self.__img.get_publisher_last_update_time( |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1213 |
prefix) |
1032
ff3c6b09f430
8072 history load code needs to be more resilient against unexpected data format
Shawn Walker <srw@sun.com>
parents:
1027
diff
changeset
|
1214 |
except: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1215 |
self.__reset_unlock() |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1216 |
raise |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1217 |
finally: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1218 |
self.__activity_lock.release() |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1219 |
return dt |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1220 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1221 |
def has_publisher(self, prefix=None, alias=None): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1222 |
"""Retrieves a publisher object matching the provided prefix |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1223 |
(name) or alias.""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1224 |
return self.__img.has_publisher(prefix=prefix, alias=alias) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1225 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1226 |
def remove_publisher(self, prefix=None, alias=None): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1227 |
"""Removes a publisher object matching the provided prefix |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1228 |
(name) or alias.""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1229 |
self.__img.remove_publisher(prefix=prefix, alias=alias, |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1230 |
progtrack=self.__progresstracker) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1231 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1232 |
def set_preferred_publisher(self, prefix=None, alias=None): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1233 |
"""Sets the preferred publisher for the image.""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1234 |
self.__img.set_preferred_publisher(prefix=prefix, alias=alias) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1235 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1236 |
def update_publisher(self, pub, refresh_allowed=True): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1237 |
"""Replaces an existing publisher object with the provided one |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1238 |
using the _source_object_id identifier set during copy. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1239 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1240 |
'refresh_allowed' is an optional boolean value indicating |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1241 |
whether a refresh of publisher metadata (such as its catalog) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1242 |
should be performed if transport information is changed for a |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1243 |
repository, mirror, or origin. If False, no attempt will be |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1244 |
made to retrieve publisher metadata.""" |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1245 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1246 |
self.log_operation_start("update-publisher") |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1247 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1248 |
if pub.disabled and \ |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1249 |
pub.prefix == self.__img.get_preferred_publisher(): |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1250 |
raise api_errors.SetPreferredPublisherDisabled( |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1251 |
pub.prefix) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1252 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1253 |
def need_refresh(oldo, newo): |
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1254 |
if newo.disabled: |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1255 |
# The publisher is disabled, so no refresh |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1256 |
# should be performed. |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1257 |
return False |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1258 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1259 |
if oldo.disabled and not newo.disabled: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1260 |
# The publisher has been re-enabled, so |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1261 |
# retrieve the catalog. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1262 |
return True |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1263 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1264 |
if len(newo.repositories) != len(oldo.repositories): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1265 |
# If there are an unequal number of repositories |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1266 |
# then some have been added or removed. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1267 |
return True |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1268 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1269 |
matched = 0 |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1270 |
for oldr in oldo.repositories: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1271 |
for newr in newo.repositories: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1272 |
if newr._source_object_id == id(oldr): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1273 |
matched += 1 |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1274 |
if oldr.origins != newr.origins: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1275 |
return True |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1276 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1277 |
if matched != len(newo.repositories): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1278 |
# If not all of the repositories match up, then |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1279 |
# one has been added or removed. |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1280 |
return True |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1281 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1282 |
return False |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1283 |
|
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
1284 |
refresh_catalog = False |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1285 |
updated = False |
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1286 |
disable = False |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1287 |
orig_pub = None |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1288 |
publishers = self.__img.get_publishers() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1289 |
for key, old in publishers.iteritems(): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1290 |
if pub._source_object_id == id(old): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1291 |
if need_refresh(old, pub): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1292 |
refresh_catalog = True |
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1293 |
if not old.disabled and pub.disabled: |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1294 |
disable = True |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1295 |
|
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1296 |
# Store the new publisher's id and the old |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1297 |
# publisher object so it can be restored if the |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1298 |
# update operation fails. |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1299 |
orig_pub = (id(pub), publishers[key]) |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1300 |
|
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1301 |
# Now remove the old publisher object using the |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1302 |
# iterator key since the prefix might be |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1303 |
# different for the new publisher object. |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1304 |
updated = True |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1305 |
del publishers[key] |
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1306 |
|
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1307 |
# Finally, add the new publisher object. |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1308 |
publishers[pub.prefix] = pub |
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1309 |
break |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1310 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1311 |
if not updated: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1312 |
# If a matching publisher couldn't be found and |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1313 |
# replaced, something is wrong (client api usage |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1314 |
# error). |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1315 |
e = api_errors.UnknownPublisher(pub) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1316 |
self.log_operation_end(e) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1317 |
raise e |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1318 |
|
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1319 |
def cleanup(): |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1320 |
new_id, old_pub = orig_pub |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1321 |
for new_pfx, new_pub in publishers.iteritems(): |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1322 |
if id(new_pub) == new_id: |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1323 |
del publishers[new_pfx] |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1324 |
publishers[old_pub.prefix] = old_pub |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1325 |
break |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1326 |
|
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1327 |
try: |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1328 |
if disable: |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1329 |
# Remove the publisher's metadata (such as |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1330 |
# catalogs, etc.). This only needs to be done |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1331 |
# in the event that a publisher is disabled; in |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1332 |
# any other case (the origin changing, etc.), |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1333 |
# refresh() will do the right thing. |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1334 |
self.__img.remove_publisher_metadata(pub) |
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1335 |
|
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1336 |
# Now reload the catalogs so that in-memory and |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1337 |
# on-disk state will reflect the removal. |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1338 |
self.__img.load_catalogs(self.__progresstracker, |
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1339 |
force=True) |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1340 |
elif not pub.disabled and not refresh_catalog: |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1341 |
refresh_catalog = pub.needs_refresh |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1342 |
|
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1343 |
if refresh_catalog: |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1344 |
if refresh_allowed: |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1345 |
# One of the publisher's repository |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1346 |
# origins may have changed, so the |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1347 |
# publisher needs to be revalidated. |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1348 |
self.__img.transport.valid_publisher_test( |
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1349 |
pub) |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1350 |
|
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1351 |
# Because the more strict test above |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1352 |
# was performed, there is no point in |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1353 |
# having refresh perform additional |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1354 |
# validation before attempting metadata |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1355 |
# retrieval. |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1356 |
self.__refresh(pubs=[pub], |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1357 |
immediate=True, validate=False) |
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1358 |
else: |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1359 |
# Something has changed (such as a |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1360 |
# repository origin) for the publisher, |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1361 |
# so a refresh should occur, but isn't |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1362 |
# currently allowed. As such, clear the |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1363 |
# last_refreshed time so that the next |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1364 |
# time the client checks to see if a |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1365 |
# refresh is needed and is allowed, one |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1366 |
# will be performed. |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1367 |
pub.last_refreshed = None |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1368 |
except Exception, e: |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1369 |
# If any of the above fails, the original publisher |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1370 |
# information needs to be restored so that state is |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1371 |
# consistent. |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1372 |
cleanup() |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1373 |
self.log_operation_end(error=e) |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1374 |
raise |
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1375 |
except: |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1376 |
# If any of the above fails, the original publisher |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1377 |
# information needs to be restored so that state is |
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1378 |
# consistent. |
1102
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1379 |
cleanup() |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1380 |
exc_type, exc_value, exc_traceback = \ |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1381 |
sys.exc_info() |
5ea5cdb4360d
5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents:
1100
diff
changeset
|
1382 |
self.log_operation_end(error=exc_type) |
1087
293c0aa5f32e
8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents:
1081
diff
changeset
|
1383 |
raise |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1384 |
|
996
31d152a5212b
7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
941
diff
changeset
|
1385 |
# Successful; so save configuration. |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1386 |
self.__img.save_config() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1387 |
self.log_operation_end() |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1388 |
return |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1389 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1390 |
def log_operation_end(self, error=None, result=None): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1391 |
"""Marks the end of an operation to be recorded in image |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1392 |
history. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1393 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1394 |
'result' should be a pkg.client.history constant value |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1395 |
representing the outcome of an operation. If not provided, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1396 |
and 'error' is provided, the final result of the operation will |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1397 |
be based on the class of 'error' and 'error' will be recorded |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1398 |
for the current operation. If 'result' and 'error' is not |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1399 |
provided, success is assumed.""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1400 |
self.__img.history.log_operation_end(error=error, result=result) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1401 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1402 |
def log_operation_error(self, error): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1403 |
"""Adds an error to the list of errors to be recorded in image |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1404 |
history for the current opreation.""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1405 |
self.__img.history.log_operation_error(error) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1406 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1407 |
def log_operation_start(self, name): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1408 |
"""Marks the start of an operation to be recorded in image |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1409 |
history.""" |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1410 |
self.__img.history.log_operation_start(name) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1411 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1412 |
def parse_p5i(self, fileobj=None, location=None): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1413 |
"""Reads the pkg(5) publisher json formatted data at 'location' |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1414 |
or from the provided file-like object 'fileobj' and returns a |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1415 |
list of tuples of the format (publisher object, pkg_names). |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1416 |
pkg_names is a list of strings representing package names or |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1417 |
FMRIs. If any pkg_names not specific to a publisher were |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1418 |
provided, the last tuple returned will be of the format (None, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1419 |
pkg_names). |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1420 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1421 |
'fileobj' is an optional file-like object that must support a |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1422 |
'read' method for retrieving data. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1423 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1424 |
'location' is an optional string value that should either start |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1425 |
with a leading slash and be pathname of a file or a URI string. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1426 |
If it is a URI string, supported protocol schemes are 'file', |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1427 |
'ftp', 'http', and 'https'. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1428 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1429 |
'fileobj' or 'location' must be provided.""" |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1430 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1431 |
if location is None and fileobj is None: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1432 |
raise api_errors.InvalidResourceLocation(location) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1433 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1434 |
if location: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1435 |
if location.startswith(os.path.sep): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1436 |
location = os.path.abspath(location) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1437 |
location = "file://" + location |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1438 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1439 |
try: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1440 |
fileobj = urllib2.urlopen(location) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1441 |
except (EnvironmentError, ValueError, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1442 |
urllib2.HTTPError), e: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1443 |
raise api_errors.RetrievalError(e, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1444 |
location=location) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1445 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1446 |
try: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1447 |
dump_struct = json.load(fileobj) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1448 |
except (EnvironmentError, urllib2.HTTPError), e: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1449 |
raise api_errors.RetrievalError(e) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1450 |
except ValueError, e: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1451 |
# Not a valid json file. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1452 |
raise api_errors.InvalidP5IFile(e) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1453 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1454 |
try: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1455 |
ver = int(dump_struct["version"]) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1456 |
except KeyError: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1457 |
raise api_errors.InvalidP5IFile(_("missing version")) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1458 |
except ValueError: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1459 |
raise api_errors.InvalidP5IFile(_("invalid version")) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1460 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1461 |
if ver > CURRENT_P5I_VERSION: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1462 |
raise api_errors.UnsupportedP5IFile() |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1463 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1464 |
result = [] |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1465 |
try: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1466 |
plist = dump_struct.get("publishers", []) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1467 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1468 |
for p in plist: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1469 |
alias = p.get("alias", None) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1470 |
prefix = p.get("name", None) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1471 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1472 |
if not prefix: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1473 |
prefix = "Unknown" |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1474 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1475 |
pub = publisher.Publisher(prefix, alias=alias) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1476 |
pkglist = p.get("packages", []) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1477 |
result.append((pub, pkglist)) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1478 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1479 |
for r in p.get("repositories", []): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1480 |
rargs = {} |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1481 |
for prop in ("collection_type", |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1482 |
"description", "name", |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1483 |
"refresh_seconds", |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1484 |
"registration_uri"): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1485 |
val = r.get(prop, None) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1486 |
if val is None or val == "None": |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1487 |
continue |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1488 |
rargs[prop] = val |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1489 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1490 |
for prop in ("legal_uris", "mirrors", |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1491 |
"origins", "related_uris"): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1492 |
val = r.get(prop, []) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1493 |
if not isinstance(val, list): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1494 |
continue |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1495 |
rargs[prop] = val |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1496 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1497 |
if rargs.get("origins", None): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1498 |
repo = publisher.Repository( |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1499 |
**rargs) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1500 |
pub.add_repository(repo) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1501 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1502 |
pkglist = dump_struct.get("packages", []) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1503 |
if pkglist: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1504 |
result.append((None, pkglist)) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1505 |
except (api_errors.PublisherError, TypeError, ValueError), e: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1506 |
raise api_errors.InvalidP5IFile(str(e)) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1507 |
return result |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1508 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1509 |
def write_p5i(self, fileobj, pkg_names=None, pubs=None): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1510 |
"""Writes the publisher, repository, and provided package names |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1511 |
to the provided file-like object 'fileobj' in json p5i format. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1512 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1513 |
'fileobj' is only required to have a 'write' method that accepts |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1514 |
data to be written as a parameter. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1515 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1516 |
'pkg_names' is a dict of lists, tuples, or sets indexed by |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1517 |
publisher prefix that contain package names, FMRI strings, or |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1518 |
package info objects. A prefix of "" can be used for packages |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1519 |
that are not specific to a publisher. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1520 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1521 |
'pubs' is an optional list of publisher prefixes or Publisher |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1522 |
objects. If not provided, the information for all publishers |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1523 |
(excluding those disabled) will be output.""" |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1524 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1525 |
dump_struct = { |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1526 |
"packages": [], |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1527 |
"publishers": [], |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1528 |
"version": CURRENT_P5I_VERSION, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1529 |
} |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1530 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1531 |
if not pubs: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1532 |
plist = [ |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1533 |
p for p in self.get_publishers() |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1534 |
if not p.disabled |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1535 |
] |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1536 |
else: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1537 |
plist = [] |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1538 |
for p in pubs: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1539 |
if not isinstance(p, publisher.Publisher): |
1240
b261f33b84bd
10145 ImageInterface client api exposes private attributes
Shawn Walker <srw@sun.com>
parents:
1231
diff
changeset
|
1540 |
plist.append(self.__img.get_publisher( |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1541 |
prefix=p, alias=p)) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1542 |
else: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1543 |
plist.append(p) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1544 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1545 |
if pkg_names is None: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1546 |
pkg_names = {} |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1547 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1548 |
def copy_pkg_names(source, dest): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1549 |
for entry in source: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1550 |
# Publisher information is intentionally |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1551 |
# omitted as association with this specific |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1552 |
# publisher is implied by location in the |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1553 |
# output. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1554 |
if isinstance(entry, PackageInfo): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1555 |
dest.append(entry.fmri.get_fmri( |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1556 |
anarchy=True)) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1557 |
elif isinstance(entry, fmri.PkgFmri): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1558 |
dest.append(entry.get_fmri( |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1559 |
anarchy=True)) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1560 |
else: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1561 |
dest.append(str(entry)) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1562 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1563 |
dpubs = dump_struct["publishers"] |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1564 |
for p in plist: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1565 |
dpub = { |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1566 |
"alias": p.alias, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1567 |
"name": p.prefix, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1568 |
"packages": [], |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1569 |
"repositories": [] |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1570 |
} |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1571 |
dpubs.append(dpub) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1572 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1573 |
try: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1574 |
copy_pkg_names(pkg_names[p.prefix], |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1575 |
dpub["packages"]) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1576 |
except KeyError: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1577 |
pass |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1578 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1579 |
drepos = dpub["repositories"] |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1580 |
for r in p.repositories: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1581 |
reg_uri = "" |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1582 |
if r.registration_uri: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1583 |
reg_uri = r.registration_uri.uri |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1584 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1585 |
drepos.append({ |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1586 |
"collection_type": r.collection_type, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1587 |
"description": r.description, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1588 |
"legal_uris": [u.uri for u in r.legal_uris], |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1589 |
"mirrors": [u.uri for u in r.mirrors], |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1590 |
"name": r.name, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1591 |
"origins": [u.uri for u in r.origins], |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1592 |
"refresh_seconds": r.refresh_seconds, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1593 |
"registration_uri": reg_uri, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1594 |
"related_uris": [ |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1595 |
u.uri for u in r.related_uris |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1596 |
], |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1597 |
}) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1598 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1599 |
try: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1600 |
copy_pkg_names(pkg_names[""], dump_struct["packages"]) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1601 |
except KeyError: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1602 |
pass |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1603 |
|
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1604 |
return json.dump(dump_struct, fileobj, ensure_ascii=False, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1605 |
allow_nan=False, indent=2, sort_keys=True) |
716
b836c1b14137
4639 history result info differs for install and uninstall of nonexistent packages
Brock Pytlik <bpytlik@sun.com>
parents:
707
diff
changeset
|
1606 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1607 |
|
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1608 |
class Query(query_p.Query): |
1100
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1609 |
"""This class is the object used to pass queries into the api functions. |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1610 |
It encapsulates the possible options available for a query as well as |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1611 |
the text of the query itself.""" |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
1087
diff
changeset
|
1612 |
|
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1613 |
def __init__(self, text, case_sensitive, return_actions=True, |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1614 |
num_to_return=None, start_point=None): |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1615 |
if return_actions: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1616 |
return_type = query_p.Query.RETURN_ACTIONS |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1617 |
else: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1618 |
return_type = query_p.Query.RETURN_PACKAGES |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1619 |
query_p.Query.__init__(self, text, case_sensitive, return_type, |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1620 |
num_to_return, start_point) |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1621 |
|
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
938
diff
changeset
|
1622 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1623 |
class PlanDescription(object): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1624 |
"""A class which describes the changes the plan will make. It |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1625 |
provides a list of tuples of PackageInfo's. The first item in the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1626 |
tuple is the package that is being changed. The second item in the |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1627 |
tuple is the package that will be in the image after the change.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1628 |
def __init__(self, imageplan): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1629 |
self.__pkgs = \ |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1630 |
[ (PackageInfo.build_from_fmri(pp.origin_fmri), |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1631 |
PackageInfo.build_from_fmri(pp.destination_fmri)) |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1632 |
for pp |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1633 |
in imageplan.pkg_plans ] |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1634 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1635 |
def get_changes(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1636 |
return self.__pkgs |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1637 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1638 |
class LicenseInfo(object): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1639 |
"""A class representing the license information a package |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1640 |
provides.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1641 |
def __init__(self, text): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1642 |
self.__text = text |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1643 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1644 |
def get_text(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1645 |
return self.__text |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1646 |
|
610
09641d85df90
4132 Info --license no longer displays a license
Brock Pytlik <bpytlik@sun.com>
parents:
598
diff
changeset
|
1647 |
def __str__(self): |
09641d85df90
4132 Info --license no longer displays a license
Brock Pytlik <bpytlik@sun.com>
parents:
598
diff
changeset
|
1648 |
return self.__text |
09641d85df90
4132 Info --license no longer displays a license
Brock Pytlik <bpytlik@sun.com>
parents:
598
diff
changeset
|
1649 |
|
688
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1650 |
class PackageCategory(object): |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1651 |
def __init__(self, scheme, category): |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1652 |
self.scheme = scheme |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1653 |
self.category = category |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1654 |
|
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1655 |
def __str__(self, verbose=False): |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1656 |
if verbose: |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1657 |
return "%s (%s)" % (self.category, self.scheme) |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1658 |
else: |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1659 |
return "%s" % self.category |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1660 |
|
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1661 |
class PackageInfo(object): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1662 |
"""A class capturing the information about packages that a client |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1663 |
could need. The fmri is guaranteed to be set. All other values may |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1664 |
be None, depending on how the PackageInfo instance was created.""" |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1665 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1666 |
# Possible package installation states |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1667 |
INSTALLED = 1 |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1668 |
NOT_INSTALLED = 2 |
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
1669 |
|
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
1670 |
__NUM_PROPS = 12 |
938
eeb932b9b44e
7336 putback for 5871 missed a few vestiges of authority
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
926
diff
changeset
|
1671 |
IDENTITY, SUMMARY, CATEGORIES, STATE, PREF_PUBLISHER, SIZE, LICENSES, \ |
917
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
1672 |
LINKS, HARDLINKS, FILES, DIRS, DEPENDENCIES = range(__NUM_PROPS) |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
1673 |
ALL_OPTIONS = frozenset(range(__NUM_PROPS)) |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
1674 |
ACTION_OPTIONS = frozenset([LINKS, HARDLINKS, FILES, DIRS, |
eed22f430a9f
6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents:
884
diff
changeset
|
1675 |
DEPENDENCIES]) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1676 |
|
688
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1677 |
def __init__(self, pfmri, pkg_stem=None, summary=None, |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1678 |
category_info_list=None, state=None, publisher=None, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1679 |
preferred_publisher=None, version=None, build_release=None, |
688
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1680 |
branch=None, packaging_date=None, size=None, licenses=None, |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1681 |
links=None, hardlinks=None, files=None, dirs=None, |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1682 |
dependencies=None): |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1683 |
self.pkg_stem = pkg_stem |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1684 |
self.summary = summary |
688
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1685 |
if category_info_list is None: |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1686 |
category_info_list = [] |
32a3ca40676e
4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents:
685
diff
changeset
|
1687 |
self.category_info_list = category_info_list |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1688 |
self.state = state |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1689 |
self.publisher = publisher |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1690 |
self.preferred_publisher = preferred_publisher |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1691 |
self.version = version |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1692 |
self.build_release = build_release |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1693 |
self.branch = branch |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1694 |
self.packaging_date = packaging_date |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1695 |
self.size = size |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1696 |
self.fmri = pfmri |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1697 |
self.licenses = licenses |
615
aeeeb9f31173
4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents:
610
diff
changeset
|
1698 |
self.links = links |
aeeeb9f31173
4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents:
610
diff
changeset
|
1699 |
self.hardlinks = hardlinks |
aeeeb9f31173
4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents:
610
diff
changeset
|
1700 |
self.files = files |
aeeeb9f31173
4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents:
610
diff
changeset
|
1701 |
self.dirs = dirs |
aeeeb9f31173
4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents:
610
diff
changeset
|
1702 |
self.dependencies = dependencies |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1703 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1704 |
def __str__(self): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1705 |
return self.fmri |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1706 |
|
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1707 |
@staticmethod |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1708 |
def build_from_fmri(f): |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1709 |
if not f: |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1710 |
return f |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1711 |
pub, name, version = f.tuple() |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1712 |
pub = fmri.strip_pub_pfx(pub) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1713 |
return PackageInfo(pkg_stem=name, publisher=pub, |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1714 |
version=version.release, |
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1715 |
build_release=version.build_release, branch=version.branch, |
1150
2b8aaf0b0b4e
4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents:
1141
diff
changeset
|
1716 |
packaging_date=version.get_timestamp().strftime("%c"), |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
917
diff
changeset
|
1717 |
pfmri=str(f)) |