chef 0.10.2 → 0.10.4.rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/distro/common/html/chef-client.8.html +4 -4
- data/distro/common/html/knife-cookbook.1.html +5 -3
- data/distro/common/html/knife-node.1.html +4 -4
- data/distro/common/man/man1/knife-cookbook.1 +5 -1
- data/distro/common/man/man1/knife-node.1 +1 -1
- data/distro/common/markdown/man1/knife-cookbook-site.mkd +3 -3
- data/distro/common/markdown/man1/knife-cookbook.mkd +7 -0
- data/distro/common/markdown/man1/knife-node.mkd +4 -3
- data/distro/common/markdown/man1/knife-ssh.mkd +2 -0
- data/lib/chef/application.rb +1 -0
- data/lib/chef/cookbook_loader.rb +18 -0
- data/lib/chef/cookbook_uploader.rb +1 -1
- data/lib/chef/data_bag.rb +14 -2
- data/lib/chef/data_bag_item.rb +8 -2
- data/lib/chef/encrypted_data_bag_item.rb +19 -6
- data/lib/chef/environment.rb +12 -6
- data/lib/chef/exceptions.rb +1 -0
- data/lib/chef/knife.rb +0 -28
- data/lib/chef/knife/bootstrap.rb +7 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +14 -12
- data/lib/chef/knife/bootstrap/centos5-gems.erb +8 -5
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +16 -9
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +6 -3
- data/lib/chef/knife/client_bulk_delete.rb +28 -6
- data/lib/chef/knife/cookbook_site_install.rb +2 -2
- data/lib/chef/knife/cookbook_upload.rb +71 -0
- data/lib/chef/knife/core/bootstrap_context.rb +13 -3
- data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -3
- data/lib/chef/knife/core/node_presenter.rb +5 -2
- data/lib/chef/knife/help.rb +13 -12
- data/lib/chef/knife/help_topics.rb +4 -0
- data/lib/chef/knife/ssh.rb +25 -4
- data/lib/chef/mixin/create_path.rb +3 -2
- data/lib/chef/mixin/get_source_from_package.rb +42 -0
- data/lib/chef/mixin/language.rb +8 -11
- data/lib/chef/monkey_patches/numeric.rb +9 -1
- data/lib/chef/monkey_patches/string.rb +21 -0
- data/lib/chef/platform.rb +2 -1
- data/lib/chef/provider.rb +1 -1
- data/lib/chef/provider/git.rb +16 -3
- data/lib/chef/provider/group/suse.rb +53 -0
- data/lib/chef/provider/mount/mount.rb +28 -20
- data/lib/chef/provider/package/apt.rb +39 -24
- data/lib/chef/provider/package/dpkg.rb +5 -2
- data/lib/chef/provider/package/easy_install.rb +2 -2
- data/lib/chef/provider/package/freebsd.rb +5 -2
- data/lib/chef/provider/package/macports.rb +4 -4
- data/lib/chef/provider/package/rpm.rb +4 -1
- data/lib/chef/provider/package/rubygems.rb +3 -0
- data/lib/chef/provider/package/solaris.rb +3 -0
- data/lib/chef/provider/package/yum-dump.py +239 -81
- data/lib/chef/provider/package/yum.rb +977 -110
- data/lib/chef/provider/package/zypper.rb +20 -3
- data/lib/chef/provider/remote_directory.rb +0 -1
- data/lib/chef/provider/service/arch.rb +35 -28
- data/lib/chef/provider/service/systemd.rb +102 -0
- data/lib/chef/provider/service/upstart.rb +8 -2
- data/lib/chef/providers.rb +2 -0
- data/lib/chef/resource.rb +31 -2
- data/lib/chef/resource/git.rb +9 -0
- data/lib/chef/resource/mount.rb +1 -2
- data/lib/chef/resource/yum_package.rb +20 -0
- data/lib/chef/rest.rb +1 -1
- data/lib/chef/role.rb +1 -1
- data/lib/chef/run_context.rb +3 -3
- data/lib/chef/runner.rb +15 -2
- data/lib/chef/shell_out.rb +1 -1
- data/lib/chef/shell_out/windows.rb +2 -2
- data/lib/chef/solr_query.rb +1 -1
- data/lib/chef/tasks/chef_repo.rake +1 -1
- data/lib/chef/version.rb +1 -1
- metadata +425 -441
@@ -115,7 +115,7 @@ class Chef
|
|
115
115
|
end
|
116
116
|
|
117
117
|
def install_package(name, version)
|
118
|
-
run_command(:command => "#{easy_install_binary_path} \"#{name}==#{version}\"")
|
118
|
+
run_command(:command => "#{easy_install_binary_path}#{expand_options(@new_resource.options)} \"#{name}==#{version}\"")
|
119
119
|
end
|
120
120
|
|
121
121
|
def upgrade_package(name, version)
|
@@ -123,7 +123,7 @@ class Chef
|
|
123
123
|
end
|
124
124
|
|
125
125
|
def remove_package(name, version)
|
126
|
-
run_command(:command => "#{easy_install_binary_path} -m #{name}")
|
126
|
+
run_command(:command => "#{easy_install_binary_path }#{expand_options(@new_resource.options)} -m #{name}")
|
127
127
|
end
|
128
128
|
|
129
129
|
def purge_package(name, version)
|
@@ -20,6 +20,7 @@
|
|
20
20
|
require 'chef/provider/package'
|
21
21
|
require 'chef/mixin/shell_out'
|
22
22
|
require 'chef/resource/package'
|
23
|
+
require 'chef/mixin/get_source_from_package'
|
23
24
|
|
24
25
|
class Chef
|
25
26
|
class Provider
|
@@ -27,6 +28,8 @@ class Chef
|
|
27
28
|
class Freebsd < Chef::Provider::Package
|
28
29
|
include Chef::Mixin::ShellOut
|
29
30
|
|
31
|
+
include Chef::Mixin::GetSourceFromPackage
|
32
|
+
|
30
33
|
def initialize(*args)
|
31
34
|
super
|
32
35
|
@current_resource = Chef::Resource::Package.new(@new_resource.name)
|
@@ -57,7 +60,7 @@ class Chef
|
|
57
60
|
end
|
58
61
|
|
59
62
|
def ports_makefile_variable_value(variable)
|
60
|
-
make_v = shell_out!("make -V #{variable}
|
63
|
+
make_v = shell_out!("make -V #{variable} -f #{port_path}/Makefile", :env => nil, :returns => [0,1])
|
61
64
|
make_v.stdout.strip.split($\).first # $\ is the line separator, i.e., newline
|
62
65
|
end
|
63
66
|
|
@@ -94,7 +97,7 @@ class Chef
|
|
94
97
|
unless @current_resource.version
|
95
98
|
case @new_resource.source
|
96
99
|
when /^ports$/
|
97
|
-
shell_out!("make -DBATCH install", :
|
100
|
+
shell_out!("make -DBATCH -f #{port_path}/Makefile install", :timeout => 1200, :env => nil).status
|
98
101
|
when /^http/, /^ftp/
|
99
102
|
shell_out!("pkg_add -r #{package_name}", :env => { "PACKAGESITE" => @new_resource.source, 'LC_ALL' => nil }).status
|
100
103
|
Chef::Log.debug("#{@new_resource} installed from: #{@new_resource.source}")
|
@@ -43,7 +43,7 @@ class Chef
|
|
43
43
|
|
44
44
|
def install_package(name, version)
|
45
45
|
unless @current_resource.version == version
|
46
|
-
command = "port install #{name}"
|
46
|
+
command = "port#{expand_options(@new_resource.options)} install #{name}"
|
47
47
|
command << " @#{version}" if version and !version.empty?
|
48
48
|
run_command_with_systems_locale(
|
49
49
|
:command => command
|
@@ -52,7 +52,7 @@ class Chef
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def purge_package(name, version)
|
55
|
-
command = "port uninstall #{name}"
|
55
|
+
command = "port#{expand_options(@new_resource.options)} uninstall #{name}"
|
56
56
|
command << " @#{version}" if version and !version.empty?
|
57
57
|
run_command_with_systems_locale(
|
58
58
|
:command => command
|
@@ -60,7 +60,7 @@ class Chef
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def remove_package(name, version)
|
63
|
-
command = "port deactivate #{name}"
|
63
|
+
command = "port#{expand_options(@new_resource.options)} deactivate #{name}"
|
64
64
|
command << " @#{version}" if version and !version.empty?
|
65
65
|
|
66
66
|
run_command_with_systems_locale(
|
@@ -79,7 +79,7 @@ class Chef
|
|
79
79
|
install_package(name, version)
|
80
80
|
elsif current_version != version
|
81
81
|
run_command_with_systems_locale(
|
82
|
-
:command => "port upgrade #{name} @#{version}"
|
82
|
+
:command => "port#{expand_options(@new_resource.options)} upgrade #{name} @#{version}"
|
83
83
|
)
|
84
84
|
end
|
85
85
|
end
|
@@ -18,12 +18,15 @@
|
|
18
18
|
require 'chef/provider/package'
|
19
19
|
require 'chef/mixin/command'
|
20
20
|
require 'chef/resource/package'
|
21
|
+
require 'chef/mixin/get_source_from_package'
|
21
22
|
|
22
23
|
class Chef
|
23
24
|
class Provider
|
24
25
|
class Package
|
25
26
|
class Rpm < Chef::Provider::Package
|
26
|
-
|
27
|
+
|
28
|
+
include Chef::Mixin::GetSourceFromPackage
|
29
|
+
|
27
30
|
def load_current_resource
|
28
31
|
@current_resource = Chef::Resource::Package.new(@new_resource.name)
|
29
32
|
@current_resource.package_name(@new_resource.package_name)
|
@@ -20,6 +20,7 @@
|
|
20
20
|
require 'chef/provider/package'
|
21
21
|
require 'chef/mixin/command'
|
22
22
|
require 'chef/resource/package'
|
23
|
+
require 'chef/mixin/get_source_from_package'
|
23
24
|
|
24
25
|
# Class methods on Gem are defined in rubygems
|
25
26
|
require 'rubygems'
|
@@ -299,6 +300,8 @@ class Chef
|
|
299
300
|
Chef::Log.logger
|
300
301
|
end
|
301
302
|
|
303
|
+
include Chef::Mixin::GetSourceFromPackage
|
304
|
+
|
302
305
|
def initialize(new_resource, run_context=nil)
|
303
306
|
super
|
304
307
|
if new_resource.gem_binary
|
@@ -18,12 +18,15 @@
|
|
18
18
|
require 'chef/provider/package'
|
19
19
|
require 'chef/mixin/command'
|
20
20
|
require 'chef/resource/package'
|
21
|
+
require 'chef/mixin/get_source_from_package'
|
21
22
|
|
22
23
|
class Chef
|
23
24
|
class Provider
|
24
25
|
class Package
|
25
26
|
class Solaris < Chef::Provider::Package
|
26
27
|
|
28
|
+
include Chef::Mixin::GetSourceFromPackage
|
29
|
+
|
27
30
|
# def initialize(*args)
|
28
31
|
# super
|
29
32
|
# @current_resource = Chef::Resource::Package.new(@new_resource.name)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Matthew Kent (<mkent@magoazul.com>)
|
3
|
-
# Copyright:: Copyright (c) 2009 Matthew Kent
|
3
|
+
# Copyright:: Copyright (c) 2009, 2011 Matthew Kent
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -19,110 +19,268 @@
|
|
19
19
|
# yum-dump.py
|
20
20
|
# Inspired by yumhelper.py by David Lutterkort
|
21
21
|
#
|
22
|
-
# Produce a list of installed and
|
23
|
-
#
|
22
|
+
# Produce a list of installed, available and re-installable packages using yum
|
23
|
+
# and dump the results to stdout.
|
24
24
|
#
|
25
|
-
#
|
26
|
-
#
|
25
|
+
# yum-dump invokes yum similarly to the command line interface which makes it
|
26
|
+
# subject to most of the configuration paramaters in yum.conf. yum-dump will
|
27
|
+
# also load yum plugins in the same manor as yum - these can affect the output.
|
27
28
|
#
|
28
29
|
# Can be run as non root, but that won't update the cache.
|
30
|
+
#
|
31
|
+
# Intended to support yum 2.x and 3.x
|
29
32
|
|
30
33
|
import os
|
31
34
|
import sys
|
32
35
|
import time
|
33
36
|
import yum
|
37
|
+
import re
|
38
|
+
import errno
|
34
39
|
|
35
40
|
from yum import Errors
|
41
|
+
from optparse import OptionParser
|
42
|
+
from distutils import version
|
36
43
|
|
37
|
-
|
44
|
+
YUM_PID_FILE='/var/run/yum.pid'
|
38
45
|
|
39
46
|
# Seconds to wait for exclusive access to yum
|
40
|
-
|
47
|
+
LOCK_TIMEOUT = 10
|
41
48
|
|
42
|
-
|
49
|
+
YUM_VER = version.StrictVersion(yum.__version__)
|
50
|
+
YUM_MAJOR = YUM_VER.version[0]
|
43
51
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
52
|
+
if YUM_MAJOR > 3 or YUM_MAJOR < 2:
|
53
|
+
print >> sys.stderr, "yum-dump Error: Can't match supported yum version" \
|
54
|
+
" (%s)" % yum.__version__
|
55
|
+
sys.exit(1)
|
56
|
+
|
57
|
+
# Required for Provides output
|
58
|
+
if YUM_MAJOR == 2:
|
59
|
+
import rpm
|
60
|
+
import rpmUtils.miscutils
|
61
|
+
|
62
|
+
def setup(yb, options):
|
63
|
+
# Only want our output
|
64
|
+
#
|
65
|
+
if YUM_MAJOR == 3:
|
48
66
|
try:
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
#
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
67
|
+
if YUM_VER >= version.StrictVersion("3.2.22"):
|
68
|
+
yb.preconf.errorlevel=0
|
69
|
+
yb.preconf.debuglevel=0
|
70
|
+
|
71
|
+
# initialize the config
|
72
|
+
yb.conf
|
73
|
+
else:
|
74
|
+
yb.doConfigSetup(errorlevel=0, debuglevel=0)
|
75
|
+
except yum.Errors.ConfigError, e:
|
76
|
+
# supresses an ignored exception at exit
|
77
|
+
yb.preconf = None
|
78
|
+
print >> sys.stderr, "yum-dump Config Error: %s" % e
|
79
|
+
return 1
|
80
|
+
except ValueError, e:
|
81
|
+
yb.preconf = None
|
82
|
+
print >> sys.stderr, "yum-dump Options Error: %s" % e
|
83
|
+
return 1
|
84
|
+
elif YUM_MAJOR == 2:
|
85
|
+
yb.doConfigSetup()
|
86
|
+
|
87
|
+
def __log(a,b): pass
|
88
|
+
|
89
|
+
yb.log = __log
|
90
|
+
yb.errorlog = __log
|
91
|
+
|
92
|
+
# Give Chef every possible package version, it can decide what to do with them
|
93
|
+
if YUM_MAJOR == 3:
|
94
|
+
yb.conf.showdupesfromrepos = True
|
95
|
+
elif YUM_MAJOR == 2:
|
96
|
+
yb.conf.setConfigOption('showdupesfromrepos', True)
|
97
|
+
|
98
|
+
# Optionally run only on cached repositories, but non root must use the cache
|
99
|
+
if os.geteuid() != 0:
|
100
|
+
if YUM_MAJOR == 3:
|
101
|
+
yb.conf.cache = True
|
102
|
+
elif YUM_MAJOR == 2:
|
103
|
+
yb.conf.setConfigOption('cache', True)
|
104
|
+
else:
|
105
|
+
if YUM_MAJOR == 3:
|
106
|
+
yb.conf.cache = options.cache
|
107
|
+
elif YUM_MAJOR == 2:
|
108
|
+
yb.conf.setConfigOption('cache', options.cache)
|
109
|
+
|
110
|
+
return 0
|
111
|
+
|
112
|
+
def dump_packages(yb, list, output_provides):
|
113
|
+
packages = {}
|
114
|
+
|
115
|
+
if YUM_MAJOR == 2:
|
116
|
+
yb.doTsSetup()
|
117
|
+
yb.doRepoSetup()
|
118
|
+
yb.doSackSetup()
|
119
|
+
|
120
|
+
db = yb.doPackageLists(list)
|
121
|
+
|
122
|
+
for pkg in db.installed:
|
123
|
+
pkg.type = 'i'
|
124
|
+
packages[str(pkg)] = pkg
|
125
|
+
|
126
|
+
if YUM_VER >= version.StrictVersion("3.2.21"):
|
127
|
+
for pkg in db.available:
|
128
|
+
pkg.type = 'a'
|
129
|
+
packages[str(pkg)] = pkg
|
130
|
+
|
131
|
+
# These are both installed and available
|
132
|
+
for pkg in db.reinstall_available:
|
133
|
+
pkg.type = 'r'
|
134
|
+
packages[str(pkg)] = pkg
|
135
|
+
else:
|
136
|
+
# Old style method - no reinstall list
|
137
|
+
for pkg in yb.pkgSack.returnPackages():
|
138
|
+
|
139
|
+
if str(pkg) in packages:
|
140
|
+
if packages[str(pkg)].type == "i":
|
141
|
+
packages[str(pkg)].type = 'r'
|
142
|
+
continue
|
143
|
+
|
144
|
+
pkg.type = 'a'
|
145
|
+
packages[str(pkg)] = pkg
|
146
|
+
|
147
|
+
unique_packages = packages.values()
|
148
|
+
|
149
|
+
unique_packages.sort(lambda x, y: cmp(x.name, y.name))
|
150
|
+
|
151
|
+
for pkg in unique_packages:
|
152
|
+
if output_provides == "all" or \
|
153
|
+
(output_provides == "installed" and (pkg.type == "i" or pkg.type == "r")):
|
154
|
+
|
155
|
+
# yum 2 doesn't have provides_print, implement it ourselves using methods
|
156
|
+
# based on requires gathering in packages.py
|
157
|
+
if YUM_MAJOR == 2:
|
158
|
+
provlist = []
|
159
|
+
|
160
|
+
# Installed and available are gathered in different ways
|
161
|
+
if pkg.type == 'i' or pkg.type == 'r':
|
162
|
+
names = pkg.hdr[rpm.RPMTAG_PROVIDENAME]
|
163
|
+
flags = pkg.hdr[rpm.RPMTAG_PROVIDEFLAGS]
|
164
|
+
ver = pkg.hdr[rpm.RPMTAG_PROVIDEVERSION]
|
165
|
+
if names is not None:
|
166
|
+
tmplst = zip(names, flags, ver)
|
167
|
+
|
168
|
+
for (n, f, v) in tmplst:
|
169
|
+
prov = rpmUtils.miscutils.formatRequire(n, v, f)
|
170
|
+
provlist.append(prov)
|
171
|
+
# This is slow :(
|
172
|
+
elif pkg.type == 'a':
|
173
|
+
for prcoTuple in pkg.returnPrco('provides'):
|
174
|
+
prcostr = pkg.prcoPrintable(prcoTuple)
|
175
|
+
provlist.append(prcostr)
|
176
|
+
|
177
|
+
provides = provlist
|
178
|
+
else:
|
179
|
+
provides = pkg.provides_print
|
180
|
+
else:
|
181
|
+
provides = "[]"
|
182
|
+
|
183
|
+
print '%s %s %s %s %s %s %s' % (
|
184
|
+
pkg.name,
|
185
|
+
pkg.epoch,
|
186
|
+
pkg.version,
|
187
|
+
pkg.release,
|
188
|
+
pkg.arch,
|
189
|
+
provides,
|
190
|
+
pkg.type )
|
191
|
+
|
192
|
+
return 0
|
193
|
+
|
194
|
+
def yum_dump(options):
|
195
|
+
lock_obtained = False
|
196
|
+
|
197
|
+
yb = yum.YumBase()
|
198
|
+
|
199
|
+
status = setup(yb, options)
|
200
|
+
if status != 0:
|
201
|
+
return status
|
202
|
+
|
203
|
+
if options.output_options:
|
204
|
+
print "[option installonlypkgs] %s" % " ".join(yb.conf.installonlypkgs)
|
205
|
+
|
206
|
+
# Non root can't handle locking on rhel/centos 4
|
207
|
+
if os.geteuid() != 0:
|
208
|
+
return dump_packages(yb, options.package_list, options.output_provides)
|
209
|
+
|
210
|
+
# Wrap the collection and output of packages in yum's global lock to prevent
|
211
|
+
# any inconsistencies.
|
212
|
+
try:
|
213
|
+
# Spin up to LOCK_TIMEOUT
|
214
|
+
countdown = LOCK_TIMEOUT
|
69
215
|
while True:
|
70
216
|
try:
|
71
|
-
|
217
|
+
yb.doLock(YUM_PID_FILE)
|
218
|
+
lock_obtained = True
|
72
219
|
except Errors.LockError, e:
|
73
220
|
time.sleep(1)
|
74
|
-
countdown -= 1
|
221
|
+
countdown -= 1
|
75
222
|
if countdown == 0:
|
76
|
-
print >> sys.stderr, "Error! Couldn't obtain an
|
77
|
-
|
78
|
-
|
223
|
+
print >> sys.stderr, "yum-dump Locking Error! Couldn't obtain an " \
|
224
|
+
"exclusive yum lock in %d seconds. Giving up." % LOCK_TIMEOUT
|
225
|
+
return 200
|
79
226
|
else:
|
80
227
|
break
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
228
|
+
|
229
|
+
return dump_packages(yb, options.package_list, options.output_provides)
|
230
|
+
|
231
|
+
# Ensure we clear the lock and cleanup any resources
|
232
|
+
finally:
|
85
233
|
try:
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
234
|
+
yb.closeRpmDB()
|
235
|
+
if lock_obtained == True:
|
236
|
+
yb.doUnlock(YUM_PID_FILE)
|
237
|
+
except Errors.LockError, e:
|
238
|
+
print >> sys.stderr, "yum-dump Unlock Error: %s" % e
|
239
|
+
return 200
|
240
|
+
|
241
|
+
def main():
|
242
|
+
usage = "Usage: %prog [options]\n" + \
|
243
|
+
"Output a list of installed, available and re-installable packages via yum"
|
244
|
+
parser = OptionParser(usage=usage)
|
245
|
+
parser.add_option("-C", "--cache",
|
246
|
+
action="store_true", dest="cache", default=False,
|
247
|
+
help="run entirely from cache, don't update cache")
|
248
|
+
parser.add_option("-o", "--options",
|
249
|
+
action="store_true", dest="output_options", default=False,
|
250
|
+
help="output select yum options useful to Chef")
|
251
|
+
parser.add_option("-p", "--installed-provides",
|
252
|
+
action="store_const", const="installed", dest="output_provides", default="none",
|
253
|
+
help="output Provides for installed packages, big/wide output")
|
254
|
+
parser.add_option("-P", "--all-provides",
|
255
|
+
action="store_const", const="all", dest="output_provides", default="none",
|
256
|
+
help="output Provides for all package, slow, big/wide output")
|
257
|
+
parser.add_option("-i", "--installed",
|
258
|
+
action="store_const", const="installed", dest="package_list", default="all",
|
259
|
+
help="output only installed packages")
|
260
|
+
parser.add_option("-a", "--available",
|
261
|
+
action="store_const", const="available", dest="package_list", default="all",
|
262
|
+
help="output only available and re-installable packages")
|
263
|
+
|
264
|
+
(options, args) = parser.parse_args()
|
103
265
|
|
104
|
-
# Ensure we clear the lock.
|
105
|
-
finally:
|
106
266
|
try:
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
267
|
+
return yum_dump(options)
|
268
|
+
|
269
|
+
except yum.Errors.RepoError, e:
|
270
|
+
print >> sys.stderr, "yum-dump Repository Error: %s" % e
|
271
|
+
return 1
|
272
|
+
|
273
|
+
except yum.Errors.YumBaseError, e:
|
274
|
+
print >> sys.stderr, "yum-dump General Error: %s" % e
|
275
|
+
return 1
|
276
|
+
|
277
|
+
try:
|
278
|
+
status = main()
|
279
|
+
# Suppress a nasty broken pipe error when output is piped to utilities like 'head'
|
280
|
+
except IOError, e:
|
281
|
+
if e.errno == errno.EPIPE:
|
113
282
|
sys.exit(1)
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
pkg.version,
|
119
|
-
pkg.release,
|
120
|
-
pkg.arch )
|
121
|
-
for pkg in db.available:
|
122
|
-
print '%s,available,%s,%s,%s,%s' % ( pkg.name,
|
123
|
-
pkg.epoch,
|
124
|
-
pkg.version,
|
125
|
-
pkg.release,
|
126
|
-
pkg.arch )
|
127
|
-
|
128
|
-
sys.exit(0)
|
283
|
+
else:
|
284
|
+
raise
|
285
|
+
|
286
|
+
sys.exit(status)
|