chef 0.9.18 → 0.10.0.beta.0
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/README.rdoc +0 -3
- data/distro/arch/etc/rc.d/chef-server +0 -4
- data/distro/arch/etc/rc.d/chef-server-webui +0 -4
- data/distro/arch/etc/rc.d/chef-solr +0 -4
- data/distro/arch/etc/rc.d/chef-solr-indexer +0 -4
- data/lib/chef.rb +3 -3
- data/lib/chef/api_client.rb +1 -1
- data/lib/chef/application.rb +11 -1
- data/lib/chef/application/client.rb +18 -22
- data/lib/chef/application/knife.rb +28 -29
- data/lib/chef/application/solo.rb +14 -12
- data/lib/chef/client.rb +112 -54
- data/lib/chef/config.rb +4 -0
- data/lib/chef/cookbook/chefignore.rb +66 -0
- data/lib/chef/cookbook/cookbook_collection.rb +6 -5
- data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +10 -8
- data/lib/chef/cookbook/metadata.rb +200 -108
- data/lib/chef/cookbook_loader.rb +39 -163
- data/lib/chef/cookbook_uploader.rb +100 -78
- data/lib/chef/cookbook_version.rb +92 -47
- data/lib/chef/cookbook_version_selector.rb +163 -0
- data/lib/chef/couchdb.rb +9 -1
- data/lib/chef/data_bag.rb +1 -1
- data/lib/chef/data_bag_item.rb +1 -1
- data/lib/chef/encrypted_data_bag_item.rb +126 -0
- data/lib/chef/environment.rb +386 -0
- data/lib/chef/exceptions.rb +82 -1
- data/lib/chef/index_queue/amqp_client.rb +15 -12
- data/lib/chef/index_queue/indexable.rb +38 -4
- data/lib/chef/json_compat.rb +3 -3
- data/lib/chef/knife.rb +97 -202
- data/lib/chef/knife/bootstrap.rb +27 -61
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +4 -2
- data/lib/chef/knife/bootstrap/centos5-gems.erb +6 -15
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -4
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +6 -5
- data/lib/chef/knife/client_bulk_delete.rb +6 -3
- data/lib/chef/knife/client_create.rb +13 -10
- data/lib/chef/knife/client_delete.rb +10 -7
- data/lib/chef/knife/client_edit.rb +9 -6
- data/lib/chef/knife/client_list.rb +8 -5
- data/lib/chef/knife/client_reregister.rb +9 -6
- data/lib/chef/knife/client_show.rb +9 -6
- data/lib/chef/knife/configure.rb +15 -19
- data/lib/chef/knife/configure_client.rb +4 -4
- data/lib/chef/knife/cookbook_bulk_delete.rb +11 -8
- data/lib/chef/knife/cookbook_create.rb +120 -55
- data/lib/chef/knife/cookbook_delete.rb +18 -12
- data/lib/chef/knife/cookbook_download.rb +10 -6
- data/lib/chef/knife/cookbook_list.rb +15 -6
- data/lib/chef/knife/cookbook_metadata.rb +41 -21
- data/lib/chef/knife/cookbook_metadata_from_file.rb +4 -0
- data/lib/chef/knife/cookbook_show.rb +16 -5
- data/lib/chef/knife/cookbook_site_download.rb +2 -2
- data/lib/chef/knife/cookbook_site_share.rb +18 -13
- data/lib/chef/knife/cookbook_site_unshare.rb +7 -4
- data/lib/chef/knife/cookbook_site_vendor.rb +21 -18
- data/lib/chef/knife/cookbook_test.rb +14 -14
- data/lib/chef/knife/cookbook_upload.rb +91 -40
- data/lib/chef/knife/data_bag_create.rb +41 -6
- data/lib/chef/knife/data_bag_delete.rb +5 -3
- data/lib/chef/knife/data_bag_edit.rb +55 -11
- data/lib/chef/knife/data_bag_from_file.rb +47 -7
- data/lib/chef/knife/data_bag_list.rb +4 -1
- data/lib/chef/knife/data_bag_show.rb +44 -4
- data/lib/chef/knife/environment_create.rb +53 -0
- data/lib/chef/knife/environment_delete.rb +45 -0
- data/lib/chef/knife/environment_edit.rb +45 -0
- data/lib/chef/knife/environment_from_file.rb +39 -0
- data/lib/chef/knife/environment_list.rb +42 -0
- data/lib/chef/knife/environment_show.rb +46 -0
- data/lib/chef/knife/exec.rb +1 -1
- data/lib/chef/knife/index_rebuild.rb +8 -9
- data/lib/chef/knife/node_bulk_delete.rb +9 -6
- data/lib/chef/knife/node_create.rb +9 -6
- data/lib/chef/knife/node_delete.rb +10 -7
- data/lib/chef/knife/node_edit.rb +129 -10
- data/lib/chef/knife/node_from_file.rb +10 -7
- data/lib/chef/knife/node_list.rb +11 -6
- data/lib/chef/knife/node_run_list_add.rb +10 -7
- data/lib/chef/knife/node_run_list_remove.rb +9 -6
- data/lib/chef/knife/node_show.rb +15 -7
- data/lib/chef/knife/recipe_list.rb +4 -3
- data/lib/chef/knife/role_bulk_delete.rb +9 -6
- data/lib/chef/knife/role_create.rb +9 -6
- data/lib/chef/knife/role_delete.rb +10 -7
- data/lib/chef/knife/role_edit.rb +11 -8
- data/lib/chef/knife/role_from_file.rb +10 -7
- data/lib/chef/knife/role_list.rb +8 -5
- data/lib/chef/knife/role_show.rb +11 -8
- data/lib/chef/knife/search.rb +33 -10
- data/lib/chef/knife/ssh.rb +33 -61
- data/lib/chef/knife/status.rb +7 -4
- data/lib/chef/knife/subcommand_loader.rb +101 -0
- data/lib/chef/knife/tag_create.rb +31 -0
- data/lib/chef/knife/tag_delete.rb +31 -0
- data/lib/chef/knife/tag_list.rb +29 -0
- data/lib/chef/knife/ui.rb +229 -0
- data/lib/chef/knife/windows_bootstrap.rb +8 -5
- data/lib/chef/log.rb +5 -59
- data/lib/chef/mash.rb +211 -0
- data/lib/chef/mixins.rb +1 -2
- data/lib/chef/nil_argument.rb +3 -0
- data/lib/chef/node.rb +96 -34
- data/lib/chef/platform.rb +27 -0
- data/lib/chef/provider/cookbook_file.rb +21 -20
- data/lib/chef/provider/deploy/revision.rb +3 -0
- data/lib/chef/provider/file.rb +20 -11
- data/lib/chef/provider/git.rb +26 -26
- data/lib/chef/provider/group/aix.rb +70 -0
- data/lib/chef/provider/group/groupadd.rb +7 -4
- data/lib/chef/provider/group/usermod.rb +1 -1
- data/lib/chef/provider/package.rb +28 -28
- data/lib/chef/provider/package/dpkg.rb +1 -1
- data/lib/chef/provider/package/portage.rb +50 -39
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/zypper.rb +3 -20
- data/lib/chef/provider/remote_directory.rb +0 -2
- data/lib/chef/provider/remote_file.rb +2 -3
- data/lib/chef/provider/service/arch.rb +28 -35
- data/lib/chef/provider/service/simple.rb +1 -1
- data/lib/chef/provider/subversion.rb +22 -22
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/recipe.rb +10 -12
- data/lib/chef/resource.rb +49 -42
- data/lib/chef/resource/gem_package.rb +7 -3
- data/lib/chef/resource/git.rb +5 -5
- data/lib/chef/resource/package.rb +7 -7
- data/lib/chef/resource/scm.rb +2 -1
- data/lib/chef/resource/solaris_package.rb +0 -1
- data/lib/chef/resource/yum_package.rb +0 -1
- data/lib/chef/rest.rb +7 -16
- data/lib/chef/rest/rest_request.rb +0 -16
- data/lib/chef/role.rb +67 -13
- data/lib/chef/run_context.rb +37 -21
- data/lib/chef/run_list.rb +30 -15
- data/lib/chef/run_list/run_list_expansion.rb +41 -20
- data/lib/chef/run_list/run_list_item.rb +20 -6
- data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
- data/lib/chef/runner.rb +7 -15
- data/lib/chef/search/query.rb +12 -7
- data/lib/chef/shef.rb +6 -7
- data/lib/chef/shef/shef_session.rb +40 -35
- data/lib/chef/shell_out.rb +22 -201
- data/lib/chef/shell_out/unix.rb +224 -0
- data/lib/chef/shell_out/windows.rb +95 -0
- data/lib/chef/solr_query.rb +187 -0
- data/lib/chef/solr_query/lucene.treetop +145 -0
- data/lib/chef/solr_query/lucene_nodes.rb +285 -0
- data/lib/chef/solr_query/query_transform.rb +65 -0
- data/lib/chef/solr_query/solr_http_request.rb +118 -0
- data/lib/chef/version.rb +4 -2
- data/lib/chef/version_class.rb +70 -0
- data/lib/chef/version_constraint.rb +116 -0
- metadata +68 -37
- data/lib/chef/cookbook/metadata/version.rb +0 -87
- data/lib/chef/knife/bluebox_images_list.rb +0 -54
- data/lib/chef/knife/bluebox_server_create.rb +0 -157
- data/lib/chef/knife/bluebox_server_delete.rb +0 -63
- data/lib/chef/knife/bluebox_server_list.rb +0 -59
- data/lib/chef/knife/ec2_instance_data.rb +0 -46
- data/lib/chef/knife/ec2_server_create.rb +0 -218
- data/lib/chef/knife/ec2_server_delete.rb +0 -87
- data/lib/chef/knife/ec2_server_list.rb +0 -89
- data/lib/chef/knife/rackspace_server_create.rb +0 -184
- data/lib/chef/knife/rackspace_server_delete.rb +0 -57
- data/lib/chef/knife/rackspace_server_list.rb +0 -59
- data/lib/chef/knife/slicehost_images_list.rb +0 -53
- data/lib/chef/knife/slicehost_server_create.rb +0 -103
- data/lib/chef/knife/slicehost_server_delete.rb +0 -61
- data/lib/chef/knife/slicehost_server_list.rb +0 -64
- data/lib/chef/knife/terremark_server_create.rb +0 -152
- data/lib/chef/knife/terremark_server_delete.rb +0 -87
- data/lib/chef/knife/terremark_server_list.rb +0 -77
- data/lib/chef/mixin/find_preferred_file.rb +0 -92
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
-
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
4
|
-
# License:: Apache License, Version 2.0
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
# you may not use this file except in compliance with the License.
|
|
8
|
-
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
require 'chef/knife'
|
|
20
|
-
require 'chef/json_compat'
|
|
21
|
-
|
|
22
|
-
class Chef
|
|
23
|
-
class Knife
|
|
24
|
-
class TerremarkServerDelete < Knife
|
|
25
|
-
|
|
26
|
-
banner "knife terremark server delete SERVER (options)"
|
|
27
|
-
|
|
28
|
-
def h
|
|
29
|
-
@highline ||= HighLine.new
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def run
|
|
33
|
-
require 'fog'
|
|
34
|
-
require 'highline'
|
|
35
|
-
|
|
36
|
-
terremark = Fog::Terremark.new(
|
|
37
|
-
:terremark_username => Chef::Config[:knife][:terremark_username],
|
|
38
|
-
:terremark_password => Chef::Config[:knife][:terremark_password],
|
|
39
|
-
:terremark_service => Chef::Config[:knife][:terremark_service] || :vcloud
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
$stdout.sync = true
|
|
43
|
-
|
|
44
|
-
vapp_id = terremark.servers.detect {|server| server.name == @name_args[0]}.id
|
|
45
|
-
confirm("Do you really want to delete server ID #{vapp_id} named #{@name_args[0]}")
|
|
46
|
-
|
|
47
|
-
puts "Cleaning up internet services..."
|
|
48
|
-
private_ip = terremark.servers.get(vapp_id).ip_address
|
|
49
|
-
internet_services = terremark.get_internet_services(terremark.default_vdc_id).body['InternetServices']
|
|
50
|
-
public_ip_usage = {}
|
|
51
|
-
internet_services.each do |internet_service|
|
|
52
|
-
public_ip_address = internet_service['PublicIpAddress']['Name']
|
|
53
|
-
public_ip_usage[public_ip_address] ||= []
|
|
54
|
-
public_ip_usage[public_ip_address] << internet_service['Id']
|
|
55
|
-
end
|
|
56
|
-
internet_services.each do |internet_service|
|
|
57
|
-
node_services = terremark.get_node_services(internet_service['Id']).body['NodeServices']
|
|
58
|
-
node_services.delete_if do |node_service|
|
|
59
|
-
if node_service['IpAddress'] == private_ip
|
|
60
|
-
terremark.delete_node_service(node_service['Id'])
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
if node_services.empty?
|
|
64
|
-
terremark.delete_internet_service(internet_service['Id'])
|
|
65
|
-
public_ip_usage.each_value {|internet_services| internet_services.delete(internet_service['Id'])}
|
|
66
|
-
if public_ip_usage[internet_service['PublicIpAddress']['Name']].empty?
|
|
67
|
-
terremark.delete_public_ip(internet_service['PublicIpAddress']['Id'])
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
power_off_task_id = terremark.power_off(vapp_id).body['href'].split('/').last
|
|
73
|
-
print "Waiting for power off task [#{h.color(power_off_task_id, :bold)}]"
|
|
74
|
-
terremark.tasks.get(power_off_task_id).wait_for { print '.'; ready? }
|
|
75
|
-
print "\n"
|
|
76
|
-
|
|
77
|
-
print "Deleting vApp #{h.color(vapp_id, :bold)}"
|
|
78
|
-
delete_vapp_task_id = terremark.delete_vapp(vapp_id).headers['Location'].split('/').last
|
|
79
|
-
terremark.tasks.get(delete_vapp_task_id).wait_for { print '.'; ready? }
|
|
80
|
-
print "\n"
|
|
81
|
-
|
|
82
|
-
Chef::Log.warn("Deleted server #{@name_args[0]}")
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
-
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
4
|
-
# License:: Apache License, Version 2.0
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
# you may not use this file except in compliance with the License.
|
|
8
|
-
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
require 'chef/knife'
|
|
20
|
-
require 'chef/json_compat'
|
|
21
|
-
require 'tempfile'
|
|
22
|
-
|
|
23
|
-
class Chef
|
|
24
|
-
class Knife
|
|
25
|
-
class TerremarkServerList < Knife
|
|
26
|
-
|
|
27
|
-
banner "knife terremark server list (options)"
|
|
28
|
-
|
|
29
|
-
option :terremark_password,
|
|
30
|
-
:short => "-K PASSWORD",
|
|
31
|
-
:long => "--terremark-password PASSWORD",
|
|
32
|
-
:description => "Your terremark password",
|
|
33
|
-
:proc => Proc.new { |key| Chef::Config[:knife][:terremark_password] = key }
|
|
34
|
-
|
|
35
|
-
option :terremark_username,
|
|
36
|
-
:short => "-A USERNAME",
|
|
37
|
-
:long => "--terremark-username USERNAME",
|
|
38
|
-
:description => "Your terremark username",
|
|
39
|
-
:proc => Proc.new { |username| Chef::Config[:knife][:terremark_username] = username }
|
|
40
|
-
|
|
41
|
-
option :terremark_service,
|
|
42
|
-
:short => "-S SERVICE",
|
|
43
|
-
:long => "--terremark-service SERVICE",
|
|
44
|
-
:description => "Your terremark service name",
|
|
45
|
-
:proc => Proc.new { |service| Chef::Config[:knife][:terremark_service] = service }
|
|
46
|
-
|
|
47
|
-
def h
|
|
48
|
-
@highline ||= HighLine.new
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def run
|
|
52
|
-
require 'fog'
|
|
53
|
-
require 'highline'
|
|
54
|
-
|
|
55
|
-
server_name = @name_args[0]
|
|
56
|
-
|
|
57
|
-
terremark = Fog::Terremark.new(
|
|
58
|
-
:terremark_username => Chef::Config[:knife][:terremark_username],
|
|
59
|
-
:terremark_password => Chef::Config[:knife][:terremark_password],
|
|
60
|
-
:terremark_service => Chef::Config[:knife][:terremark_service] || :vcloud
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
$stdout.sync = true
|
|
64
|
-
|
|
65
|
-
server_list = [ h.color('ID', :bold), h.color('Name', :bold) ]
|
|
66
|
-
terremark.servers.all.each do |server|
|
|
67
|
-
server_list << server.id.to_s
|
|
68
|
-
server_list << server.name
|
|
69
|
-
end
|
|
70
|
-
puts h.list(server_list, :columns_across, 2)
|
|
71
|
-
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
-
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
|
4
|
-
# License:: Apache License, Version 2.0
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
# you may not use this file except in compliance with the License.
|
|
8
|
-
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
require 'chef/cookbook_loader'
|
|
20
|
-
|
|
21
|
-
class Chef
|
|
22
|
-
module Mixin
|
|
23
|
-
module FindPreferredFile
|
|
24
|
-
|
|
25
|
-
def load_cookbook_files(cookbook_id, file_type)
|
|
26
|
-
unless file_type == :remote_file || file_type == :template
|
|
27
|
-
raise ArgumentError, "You must supply :remote_file or :template as the file_type"
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
cl = Chef::CookbookLoader.new
|
|
31
|
-
cookbook = cl[cookbook_id]
|
|
32
|
-
raise NotFound unless cookbook
|
|
33
|
-
|
|
34
|
-
files = Hash.new
|
|
35
|
-
|
|
36
|
-
cookbook_method = nil
|
|
37
|
-
|
|
38
|
-
case file_type
|
|
39
|
-
when :remote_file
|
|
40
|
-
cookbook_method = :remote_files
|
|
41
|
-
when :template
|
|
42
|
-
cookbook_method = :template_files
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
cookbook.send(cookbook_method).each do |rf|
|
|
46
|
-
full = File.expand_path(rf)
|
|
47
|
-
name = File.basename(full)
|
|
48
|
-
case file_type
|
|
49
|
-
when :remote_file
|
|
50
|
-
rf =~ /^.+#{Regexp.escape(cookbook_id)}[\\|\/]files[\\|\/](.+?)[\\|\/]#{Regexp.escape(name)}/
|
|
51
|
-
when :template
|
|
52
|
-
rf =~ /^.+#{Regexp.escape(cookbook_id)}[\\|\/]templates[\\|\/](.+?)[\\|\/]#{Regexp.escape(name)}/
|
|
53
|
-
end
|
|
54
|
-
singlecopy = $1
|
|
55
|
-
files[full] = {
|
|
56
|
-
:name => name,
|
|
57
|
-
:singlecopy => singlecopy,
|
|
58
|
-
:file => full,
|
|
59
|
-
}
|
|
60
|
-
end
|
|
61
|
-
Chef::Log.debug("Preferred #{file_type} list: #{files.inspect}")
|
|
62
|
-
|
|
63
|
-
files
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def find_preferred_file(cookbook_id, file_type, file_name, fqdn, platform, version)
|
|
67
|
-
file_list = load_cookbook_files(cookbook_id, file_type)
|
|
68
|
-
|
|
69
|
-
preferences = [
|
|
70
|
-
File.join("host-#{fqdn}", "#{file_name}"),
|
|
71
|
-
File.join("#{platform}-#{version}", "#{file_name}"),
|
|
72
|
-
File.join("#{platform}", "#{file_name}"),
|
|
73
|
-
File.join("default", "#{file_name}")
|
|
74
|
-
]
|
|
75
|
-
|
|
76
|
-
file_list_str = file_list.keys.join("\n")
|
|
77
|
-
Chef::Log.debug("Searching for preferred file in\n#{file_list_str}")
|
|
78
|
-
|
|
79
|
-
preferences.each do |pref|
|
|
80
|
-
Chef::Log.debug("Looking for #{pref}")
|
|
81
|
-
matcher = /^(.+#{Regexp.escape(pref)})$/
|
|
82
|
-
if match = matcher.match(file_list_str)
|
|
83
|
-
return match[1]
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
raise Chef::Exceptions::FileNotFound, "Cannot find a preferred file for #{file_name}!"
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|