mbailey-chef 0.9.12.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/LICENSE +201 -0
- data/README.rdoc +172 -0
- data/bin/chef-client +26 -0
- data/bin/chef-solo +25 -0
- data/bin/knife +26 -0
- data/bin/shef +34 -0
- data/distro/README +2 -0
- data/distro/common/man/man1/chef-indexer.1 +42 -0
- data/distro/common/man/man1/chef-server-webui.1 +106 -0
- data/distro/common/man/man1/chef-server.1 +107 -0
- data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
- data/distro/common/man/man1/chef-solr.1 +55 -0
- data/distro/common/man/man8/chef-client.8 +63 -0
- data/distro/common/man/man8/chef-solo.8 +57 -0
- data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
- data/distro/common/man/man8/knife.8 +1349 -0
- data/distro/common/man/man8/shef.8 +45 -0
- data/distro/common/markdown/README +3 -0
- data/distro/common/markdown/knife.mkd +832 -0
- data/distro/debian/etc/default/chef-client +4 -0
- data/distro/debian/etc/default/chef-server +9 -0
- data/distro/debian/etc/default/chef-server-webui +9 -0
- data/distro/debian/etc/default/chef-solr +7 -0
- data/distro/debian/etc/default/chef-solr-indexer +7 -0
- data/distro/debian/etc/init/chef-client.conf +17 -0
- data/distro/debian/etc/init/chef-server-webui.conf +17 -0
- data/distro/debian/etc/init/chef-server.conf +17 -0
- data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
- data/distro/debian/etc/init/chef-solr.conf +17 -0
- data/distro/debian/etc/init.d/chef-client +175 -0
- data/distro/debian/etc/init.d/chef-server +122 -0
- data/distro/debian/etc/init.d/chef-server-webui +123 -0
- data/distro/debian/etc/init.d/chef-solr +177 -0
- data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
- data/distro/redhat/etc/init.d/chef-client +106 -0
- data/distro/redhat/etc/init.d/chef-server +112 -0
- data/distro/redhat/etc/init.d/chef-server-webui +112 -0
- data/distro/redhat/etc/init.d/chef-solr +104 -0
- data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
- data/distro/redhat/etc/logrotate.d/chef-client +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
- data/distro/redhat/etc/sysconfig/chef-client +15 -0
- data/distro/redhat/etc/sysconfig/chef-server +14 -0
- data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
- data/distro/redhat/etc/sysconfig/chef-solr +8 -0
- data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
- data/lib/chef/api_client.rb +264 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +246 -0
- data/lib/chef/application/knife.rb +171 -0
- data/lib/chef/application/solo.rb +215 -0
- data/lib/chef/application.rb +127 -0
- data/lib/chef/applications.rb +4 -0
- data/lib/chef/certificate.rb +194 -0
- data/lib/chef/checksum.rb +182 -0
- data/lib/chef/checksum_cache.rb +173 -0
- data/lib/chef/client.rb +304 -0
- data/lib/chef/config.rb +240 -0
- data/lib/chef/cookbook/cookbook_collection.rb +44 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +54 -0
- data/lib/chef/cookbook/file_vendor.rb +48 -0
- data/lib/chef/cookbook/metadata/version.rb +87 -0
- data/lib/chef/cookbook/metadata.rb +500 -0
- data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
- data/lib/chef/cookbook/syntax_check.rb +136 -0
- data/lib/chef/cookbook_loader.rb +227 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
- data/lib/chef/cookbook_uploader.rb +103 -0
- data/lib/chef/cookbook_version.rb +930 -0
- data/lib/chef/couchdb.rb +239 -0
- data/lib/chef/daemon.rb +172 -0
- data/lib/chef/data_bag.rb +215 -0
- data/lib/chef/data_bag_item.rb +228 -0
- data/lib/chef/exceptions.rb +66 -0
- data/lib/chef/file_access_control.rb +140 -0
- data/lib/chef/file_cache.rb +218 -0
- data/lib/chef/handler/json_file.rb +58 -0
- data/lib/chef/handler.rb +206 -0
- data/lib/chef/index_queue/amqp_client.rb +113 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +76 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +44 -0
- data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
- data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +43 -0
- data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
- data/lib/chef/knife/bootstrap.rb +181 -0
- data/lib/chef/knife/client_bulk_delete.rb +40 -0
- data/lib/chef/knife/client_create.rb +70 -0
- data/lib/chef/knife/client_delete.rb +45 -0
- data/lib/chef/knife/client_edit.rb +45 -0
- data/lib/chef/knife/client_list.rb +40 -0
- data/lib/chef/knife/client_reregister.rb +56 -0
- data/lib/chef/knife/client_show.rb +50 -0
- data/lib/chef/knife/configure.rb +140 -0
- data/lib/chef/knife/configure_client.rb +52 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +58 -0
- data/lib/chef/knife/cookbook_create.rb +209 -0
- data/lib/chef/knife/cookbook_delete.rb +143 -0
- data/lib/chef/knife/cookbook_download.rb +130 -0
- data/lib/chef/knife/cookbook_list.rb +41 -0
- data/lib/chef/knife/cookbook_metadata.rb +82 -0
- data/lib/chef/knife/cookbook_metadata_from_file.rb +40 -0
- data/lib/chef/knife/cookbook_show.rb +98 -0
- data/lib/chef/knife/cookbook_site_download.rb +58 -0
- data/lib/chef/knife/cookbook_site_list.rb +56 -0
- data/lib/chef/knife/cookbook_site_search.rb +51 -0
- data/lib/chef/knife/cookbook_site_share.rb +109 -0
- data/lib/chef/knife/cookbook_site_show.rb +57 -0
- data/lib/chef/knife/cookbook_site_unshare.rb +52 -0
- data/lib/chef/knife/cookbook_site_vendor.rb +133 -0
- data/lib/chef/knife/cookbook_test.rb +82 -0
- data/lib/chef/knife/cookbook_upload.rb +95 -0
- data/lib/chef/knife/data_bag_create.rb +59 -0
- data/lib/chef/knife/data_bag_delete.rb +48 -0
- data/lib/chef/knife/data_bag_edit.rb +50 -0
- data/lib/chef/knife/data_bag_from_file.rb +44 -0
- data/lib/chef/knife/data_bag_list.rb +43 -0
- data/lib/chef/knife/data_bag_show.rb +41 -0
- data/lib/chef/knife/ec2_instance_data.rb +46 -0
- data/lib/chef/knife/ec2_server_create.rb +216 -0
- data/lib/chef/knife/ec2_server_delete.rb +90 -0
- data/lib/chef/knife/ec2_server_list.rb +88 -0
- data/lib/chef/knife/exec.rb +52 -0
- data/lib/chef/knife/index_rebuild.rb +51 -0
- data/lib/chef/knife/node_bulk_delete.rb +43 -0
- data/lib/chef/knife/node_create.rb +47 -0
- data/lib/chef/knife/node_delete.rb +44 -0
- data/lib/chef/knife/node_edit.rb +44 -0
- data/lib/chef/knife/node_from_file.rb +42 -0
- data/lib/chef/knife/node_list.rb +41 -0
- data/lib/chef/knife/node_run_list_add.rb +64 -0
- data/lib/chef/knife/node_run_list_remove.rb +45 -0
- data/lib/chef/knife/node_show.rb +54 -0
- data/lib/chef/knife/rackspace_server_create.rb +156 -0
- data/lib/chef/knife/rackspace_server_delete.rb +57 -0
- data/lib/chef/knife/rackspace_server_list.rb +59 -0
- data/lib/chef/knife/recipe_list.rb +32 -0
- data/lib/chef/knife/role_bulk_delete.rb +44 -0
- data/lib/chef/knife/role_create.rb +52 -0
- data/lib/chef/knife/role_delete.rb +44 -0
- data/lib/chef/knife/role_edit.rb +45 -0
- data/lib/chef/knife/role_from_file.rb +46 -0
- data/lib/chef/knife/role_list.rb +40 -0
- data/lib/chef/knife/role_show.rb +51 -0
- data/lib/chef/knife/search.rb +94 -0
- data/lib/chef/knife/slicehost_images_list.rb +53 -0
- data/lib/chef/knife/slicehost_server_create.rb +103 -0
- data/lib/chef/knife/slicehost_server_delete.rb +61 -0
- data/lib/chef/knife/slicehost_server_list.rb +64 -0
- data/lib/chef/knife/ssh.rb +328 -0
- data/lib/chef/knife/status.rb +87 -0
- data/lib/chef/knife/terremark_server_create.rb +152 -0
- data/lib/chef/knife/terremark_server_delete.rb +87 -0
- data/lib/chef/knife/terremark_server_list.rb +77 -0
- data/lib/chef/knife/windows_bootstrap.rb +154 -0
- data/lib/chef/knife.rb +522 -0
- data/lib/chef/log.rb +61 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command/unix.rb +215 -0
- data/lib/chef/mixin/command/windows.rb +72 -0
- data/lib/chef/mixin/command.rb +220 -0
- data/lib/chef/mixin/convert_to_class_name.rb +63 -0
- data/lib/chef/mixin/create_path.rb +56 -0
- data/lib/chef/mixin/deep_merge.rb +225 -0
- data/lib/chef/mixin/deprecation.rb +65 -0
- data/lib/chef/mixin/find_preferred_file.rb +92 -0
- data/lib/chef/mixin/from_file.rb +50 -0
- data/lib/chef/mixin/language.rb +156 -0
- data/lib/chef/mixin/language_include_attribute.rb +61 -0
- data/lib/chef/mixin/language_include_recipe.rb +52 -0
- data/lib/chef/mixin/params_validate.rb +225 -0
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
- data/lib/chef/mixin/shell_out.rb +38 -0
- data/lib/chef/mixin/template.rb +95 -0
- data/lib/chef/mixin/xml_escape.rb +140 -0
- data/lib/chef/mixins.rb +16 -0
- data/lib/chef/monkey_patches/dir.rb +36 -0
- data/lib/chef/monkey_patches/string.rb +28 -0
- data/lib/chef/monkey_patches/tempfile.rb +64 -0
- data/lib/chef/node/attribute.rb +465 -0
- data/lib/chef/node.rb +601 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +371 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +100 -0
- data/lib/chef/provider/cron/solaris.rb +195 -0
- data/lib/chef/provider/cron.rb +186 -0
- data/lib/chef/provider/deploy/revision.rb +73 -0
- data/lib/chef/provider/deploy/timestamped.rb +33 -0
- data/lib/chef/provider/deploy.rb +319 -0
- data/lib/chef/provider/directory.rb +72 -0
- data/lib/chef/provider/env/windows.rb +75 -0
- data/lib/chef/provider/env.rb +152 -0
- data/lib/chef/provider/erl_call.rb +72 -0
- data/lib/chef/provider/execute.rb +58 -0
- data/lib/chef/provider/file.rb +213 -0
- data/lib/chef/provider/git.rb +211 -0
- data/lib/chef/provider/group/dscl.rb +121 -0
- data/lib/chef/provider/group/gpasswd.rb +53 -0
- data/lib/chef/provider/group/groupadd.rb +78 -0
- data/lib/chef/provider/group/pw.rb +84 -0
- data/lib/chef/provider/group/usermod.rb +57 -0
- data/lib/chef/provider/group/windows.rb +79 -0
- data/lib/chef/provider/group.rb +133 -0
- data/lib/chef/provider/http_request.rb +122 -0
- data/lib/chef/provider/ifconfig.rb +132 -0
- data/lib/chef/provider/link.rb +161 -0
- data/lib/chef/provider/log.rb +54 -0
- data/lib/chef/provider/mdadm.rb +91 -0
- data/lib/chef/provider/mount/mount.rb +232 -0
- data/lib/chef/provider/mount/windows.rb +80 -0
- data/lib/chef/provider/mount.rb +117 -0
- data/lib/chef/provider/ohai.rb +41 -0
- data/lib/chef/provider/package/apt.rb +110 -0
- data/lib/chef/provider/package/dpkg.rb +112 -0
- data/lib/chef/provider/package/easy_install.rb +114 -0
- data/lib/chef/provider/package/freebsd.rb +123 -0
- data/lib/chef/provider/package/macports.rb +105 -0
- data/lib/chef/provider/package/pacman.rb +101 -0
- data/lib/chef/provider/package/portage.rb +124 -0
- data/lib/chef/provider/package/rpm.rb +101 -0
- data/lib/chef/provider/package/rubygems.rb +462 -0
- data/lib/chef/provider/package/solaris.rb +127 -0
- data/lib/chef/provider/package/yum-dump.py +128 -0
- data/lib/chef/provider/package/yum.rb +222 -0
- data/lib/chef/provider/package/zypper.rb +133 -0
- data/lib/chef/provider/package.rb +160 -0
- data/lib/chef/provider/remote_directory.rb +140 -0
- data/lib/chef/provider/remote_file.rb +120 -0
- data/lib/chef/provider/route.rb +195 -0
- data/lib/chef/provider/ruby_block.rb +33 -0
- data/lib/chef/provider/script.rb +55 -0
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/debian.rb +105 -0
- data/lib/chef/provider/service/freebsd.rb +156 -0
- data/lib/chef/provider/service/gentoo.rb +54 -0
- data/lib/chef/provider/service/init.rb +71 -0
- data/lib/chef/provider/service/redhat.rb +60 -0
- data/lib/chef/provider/service/simple.rb +118 -0
- data/lib/chef/provider/service/solaris.rb +85 -0
- data/lib/chef/provider/service/upstart.rb +192 -0
- data/lib/chef/provider/service/windows.rb +129 -0
- data/lib/chef/provider/service.rb +128 -0
- data/lib/chef/provider/subversion.rb +159 -0
- data/lib/chef/provider/template.rb +105 -0
- data/lib/chef/provider/user/dscl.rb +280 -0
- data/lib/chef/provider/user/pw.rb +113 -0
- data/lib/chef/provider/user/useradd.rb +137 -0
- data/lib/chef/provider/user/windows.rb +124 -0
- data/lib/chef/provider/user.rb +187 -0
- data/lib/chef/provider.rb +124 -0
- data/lib/chef/providers.rb +91 -0
- data/lib/chef/recipe.rb +130 -0
- data/lib/chef/resource/apt_package.rb +34 -0
- data/lib/chef/resource/bash.rb +33 -0
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/cookbook_file.rb +45 -0
- data/lib/chef/resource/cron.rb +188 -0
- data/lib/chef/resource/csh.rb +33 -0
- data/lib/chef/resource/deploy.rb +371 -0
- data/lib/chef/resource/deploy_revision.rb +35 -0
- data/lib/chef/resource/directory.rb +76 -0
- data/lib/chef/resource/dpkg_package.rb +34 -0
- data/lib/chef/resource/easy_install_package.rb +41 -0
- data/lib/chef/resource/env.rb +58 -0
- data/lib/chef/resource/erl_call.rb +83 -0
- data/lib/chef/resource/execute.rb +127 -0
- data/lib/chef/resource/file.rb +92 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/gem_package.rb +49 -0
- data/lib/chef/resource/git.rb +36 -0
- data/lib/chef/resource/group.rb +70 -0
- data/lib/chef/resource/http_request.rb +61 -0
- data/lib/chef/resource/ifconfig.rb +134 -0
- data/lib/chef/resource/link.rb +78 -0
- data/lib/chef/resource/log.rb +62 -0
- data/lib/chef/resource/macports_package.rb +29 -0
- data/lib/chef/resource/mdadm.rb +82 -0
- data/lib/chef/resource/mount.rb +135 -0
- data/lib/chef/resource/ohai.rb +40 -0
- data/lib/chef/resource/package.rb +80 -0
- data/lib/chef/resource/pacman_package.rb +33 -0
- data/lib/chef/resource/perl.rb +33 -0
- data/lib/chef/resource/portage_package.rb +33 -0
- data/lib/chef/resource/python.rb +33 -0
- data/lib/chef/resource/remote_directory.rb +109 -0
- data/lib/chef/resource/remote_file.rb +83 -0
- data/lib/chef/resource/route.rb +135 -0
- data/lib/chef/resource/rpm_package.rb +34 -0
- data/lib/chef/resource/ruby.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +40 -0
- data/lib/chef/resource/scm.rb +146 -0
- data/lib/chef/resource/script.rb +60 -0
- data/lib/chef/resource/service.rb +160 -0
- data/lib/chef/resource/solaris_package.rb +36 -0
- data/lib/chef/resource/subversion.rb +36 -0
- data/lib/chef/resource/template.rb +69 -0
- data/lib/chef/resource/timestamped_deploy.rb +31 -0
- data/lib/chef/resource/user.rb +130 -0
- data/lib/chef/resource/yum_package.rb +43 -0
- data/lib/chef/resource.rb +523 -0
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/resource_collection.rb +217 -0
- data/lib/chef/resource_definition.rb +67 -0
- data/lib/chef/resource_definition_list.rb +38 -0
- data/lib/chef/resources.rb +64 -0
- data/lib/chef/rest/auth_credentials.rb +78 -0
- data/lib/chef/rest/cookie_jar.rb +31 -0
- data/lib/chef/rest/rest_request.rb +188 -0
- data/lib/chef/rest.rb +394 -0
- data/lib/chef/role.rb +287 -0
- data/lib/chef/run_context.rb +110 -0
- data/lib/chef/run_list/run_list_expansion.rb +172 -0
- data/lib/chef/run_list/run_list_item.rb +78 -0
- data/lib/chef/run_list.rb +150 -0
- data/lib/chef/run_status.rb +121 -0
- data/lib/chef/runner.rb +107 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/search/query.rb +60 -0
- data/lib/chef/shef/ext.rb +568 -0
- data/lib/chef/shef/model_wrapper.rb +120 -0
- data/lib/chef/shef/shef_rest.rb +28 -0
- data/lib/chef/shef/shef_session.rb +271 -0
- data/lib/chef/shef.rb +325 -0
- data/lib/chef/shell_out.rb +413 -0
- data/lib/chef/streaming_cookbook_uploader.rb +201 -0
- data/lib/chef/tasks/chef_repo.rake +256 -0
- data/lib/chef/util/file_edit.rb +122 -0
- data/lib/chef/util/windows/net_group.rb +101 -0
- data/lib/chef/util/windows/net_use.rb +121 -0
- data/lib/chef/util/windows/net_user.rb +198 -0
- data/lib/chef/util/windows/volume.rb +59 -0
- data/lib/chef/util/windows.rb +56 -0
- data/lib/chef/version.rb +21 -0
- data/lib/chef/webui_user.rb +231 -0
- data/lib/chef.rb +39 -0
- metadata +533 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010 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
|
+
class Chef
|
|
19
|
+
class RunList
|
|
20
|
+
class RunListItem
|
|
21
|
+
QUALIFIED_RECIPE = %r{^recipe\[([^\]]+)\]$}
|
|
22
|
+
QUALIFIED_ROLE = %r{^role\[([^\]]+)\]$}
|
|
23
|
+
|
|
24
|
+
attr_reader :name
|
|
25
|
+
|
|
26
|
+
attr_reader :type
|
|
27
|
+
|
|
28
|
+
def initialize(item)
|
|
29
|
+
case item
|
|
30
|
+
when Hash
|
|
31
|
+
assert_hash_is_valid_run_list_item!(item)
|
|
32
|
+
@type = (item['type'] || item[:type]).to_sym
|
|
33
|
+
@name = item['name'] || item[:name]
|
|
34
|
+
when String
|
|
35
|
+
if match = QUALIFIED_RECIPE.match(item)
|
|
36
|
+
@type = :recipe
|
|
37
|
+
@name = match[1]
|
|
38
|
+
elsif match = QUALIFIED_ROLE.match(item)
|
|
39
|
+
@type = :role
|
|
40
|
+
@name = match[1]
|
|
41
|
+
else
|
|
42
|
+
@type = :recipe
|
|
43
|
+
@name = item
|
|
44
|
+
end
|
|
45
|
+
else
|
|
46
|
+
raise ArgumentError, "Unable to create #{self.class} from #{item.class}:#{item.inspect}: must be a Hash or String"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def to_s
|
|
51
|
+
"#{@type}[#{@name}]"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def role?
|
|
55
|
+
@type == :role
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def recipe?
|
|
59
|
+
@type == :recipe
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def ==(other)
|
|
63
|
+
if other.kind_of?(String)
|
|
64
|
+
self.to_s == other.to_s
|
|
65
|
+
else
|
|
66
|
+
other.respond_to?(:type) && other.respond_to?(:name) && other.type == @type && other.name == @name
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def assert_hash_is_valid_run_list_item!(item)
|
|
71
|
+
unless (item.key?('type')|| item.key?(:type)) && (item.key?('name') || item.key?(:name))
|
|
72
|
+
raise ArgumentError, "Initializing a #{self.class} from a hash requires that it have a 'type' and 'name' key"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Nuo Yan (<nuoyan@opscode.com>)
|
|
4
|
+
# Author:: Tim Hinderliter (<tim@opscode.com>)
|
|
5
|
+
# Author:: Christopher Walters (<cw@opscode.com>)
|
|
6
|
+
# Copyright:: Copyright (c) 2008-2010 Opscode, Inc.
|
|
7
|
+
# License:: Apache License, Version 2.0
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
|
|
21
|
+
require 'chef/run_list/run_list_item'
|
|
22
|
+
require 'chef/run_list/run_list_expansion'
|
|
23
|
+
|
|
24
|
+
class Chef
|
|
25
|
+
class RunList
|
|
26
|
+
include Enumerable
|
|
27
|
+
|
|
28
|
+
# @run_list_items is an array of RunListItems that describe the items to
|
|
29
|
+
# execute in order. RunListItems can load from and convert to the string
|
|
30
|
+
# forms users set on roles and nodes.
|
|
31
|
+
# For example:
|
|
32
|
+
# @run_list_items = ['recipe[foo::bar]', 'role[webserver]']
|
|
33
|
+
# Thus,
|
|
34
|
+
# self.role_names would return ['webserver']
|
|
35
|
+
# self.recipe_names would return ['foo::bar']
|
|
36
|
+
attr_reader :run_list_items
|
|
37
|
+
|
|
38
|
+
# For backwards compat
|
|
39
|
+
alias :run_list :run_list_items
|
|
40
|
+
|
|
41
|
+
def initialize
|
|
42
|
+
@run_list_items = Array.new
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def role_names
|
|
46
|
+
@run_list_items.inject([]){|memo, run_list_item| memo << run_list_item.name if run_list_item.role? ; memo}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
alias :roles :role_names
|
|
50
|
+
|
|
51
|
+
def recipe_names
|
|
52
|
+
@run_list_items.inject([]){|memo, run_list_item| memo << run_list_item.name if run_list_item.recipe? ; memo}
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
alias :recipes :recipe_names
|
|
56
|
+
|
|
57
|
+
# Add an item of the form "recipe[foo::bar]" or "role[webserver]";
|
|
58
|
+
# takes a String or a RunListItem
|
|
59
|
+
def <<(run_list_item)
|
|
60
|
+
run_list_item = run_list_item.kind_of?(RunListItem) ? run_list_item : parse_entry(run_list_item)
|
|
61
|
+
@run_list_items << run_list_item unless @run_list_items.include?(run_list_item)
|
|
62
|
+
self
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def ==(other)
|
|
66
|
+
if other.kind_of?(Chef::RunList)
|
|
67
|
+
other.run_list_items == @run_list_items
|
|
68
|
+
else
|
|
69
|
+
return false unless other.respond_to?(:size) && (other.size == @run_list_items.size)
|
|
70
|
+
other_run_list_items = other.dup
|
|
71
|
+
|
|
72
|
+
other_run_list_items.map! { |item| item.kind_of?(RunListItem) ? item : RunListItem.new(item) }
|
|
73
|
+
other_run_list_items == @run_list_items
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def to_s
|
|
78
|
+
@run_list_items.join(", ")
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def empty?
|
|
82
|
+
@run_list_items.length == 0 ? true : false
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def [](pos)
|
|
86
|
+
@run_list_items[pos]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def []=(pos, item)
|
|
90
|
+
@run_list_items[pos] = parse_entry(item)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def each(&block)
|
|
94
|
+
@run_list_items.each { |i| block.call(i) }
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def each_index(&block)
|
|
98
|
+
@run_list_items.each_index { |i| block.call(i) }
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def include?(item)
|
|
102
|
+
@run_list_items.include?(parse_entry(item))
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def reset!(*args)
|
|
106
|
+
@run_list_items.clear
|
|
107
|
+
args.flatten.each do |item|
|
|
108
|
+
if item.kind_of?(Chef::RunList)
|
|
109
|
+
item.each { |r| self << r }
|
|
110
|
+
else
|
|
111
|
+
self << item
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
self
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def remove(item)
|
|
118
|
+
@run_list_items.delete_if{|i| i == item}
|
|
119
|
+
self
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def expand(data_source='server', couchdb=nil, rest=nil)
|
|
123
|
+
couchdb = couchdb ? couchdb : Chef::CouchDB.new
|
|
124
|
+
|
|
125
|
+
expansion = expansion_for_data_source(data_source, :couchdb => couchdb, :rest => rest)
|
|
126
|
+
expansion.expand
|
|
127
|
+
expansion
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Converts a string run list entry to a RunListItem object.
|
|
131
|
+
# TODO: 5/27/2010 cw: this method has become nothing more than a proxy, revisit its necessity
|
|
132
|
+
def parse_entry(entry)
|
|
133
|
+
RunListItem.new(entry)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def expansion_for_data_source(data_source, opts={})
|
|
137
|
+
data_source = 'disk' if Chef::Config[:solo]
|
|
138
|
+
case data_source.to_s
|
|
139
|
+
when 'disk'
|
|
140
|
+
RunListExpansionFromDisk.new(@run_list_items)
|
|
141
|
+
when 'server'
|
|
142
|
+
RunListExpansionFromAPI.new(@run_list_items, opts[:rest])
|
|
143
|
+
when 'couchdb'
|
|
144
|
+
RunListExpansionFromCouchDB.new(@run_list_items, opts[:couchdb])
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010 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
|
+
# == Chef::RunStatus
|
|
20
|
+
# Tracks various aspects of a Chef run, including the Node and RunContext,
|
|
21
|
+
# start and end time, and any Exception that stops the run. RunStatus objects
|
|
22
|
+
# are passed to any notification or exception handlers at the completion of a
|
|
23
|
+
# Chef run.
|
|
24
|
+
class Chef::RunStatus
|
|
25
|
+
|
|
26
|
+
attr_reader :run_context
|
|
27
|
+
|
|
28
|
+
attr_writer :run_context
|
|
29
|
+
|
|
30
|
+
attr_reader :start_time
|
|
31
|
+
|
|
32
|
+
attr_reader :end_time
|
|
33
|
+
|
|
34
|
+
attr_reader :exception
|
|
35
|
+
|
|
36
|
+
attr_writer :exception
|
|
37
|
+
|
|
38
|
+
def initialize(node)
|
|
39
|
+
@node = node
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def node
|
|
43
|
+
@node
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# sets +start_time+ to the current time.
|
|
47
|
+
def start_clock
|
|
48
|
+
@start_time = Time.now
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# sets +end_time+ to the current time
|
|
52
|
+
def stop_clock
|
|
53
|
+
@end_time = Time.now
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# The elapsed time between +start_time+ and +end_time+. Returns +nil+ if
|
|
57
|
+
# either value is not set.
|
|
58
|
+
def elapsed_time
|
|
59
|
+
if @start_time && @end_time
|
|
60
|
+
@end_time - @start_time
|
|
61
|
+
else
|
|
62
|
+
nil
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# The list of all resources in the current run context's +resource_collection+
|
|
67
|
+
def all_resources
|
|
68
|
+
@run_context && @run_context.resource_collection.all_resources
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# The list of all resources in the current run context's +resource_collection+
|
|
72
|
+
# that are marked as updated
|
|
73
|
+
def updated_resources
|
|
74
|
+
@run_context && @run_context.resource_collection.select { |r| r.updated }
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# The backtrace from +exception+, if any
|
|
78
|
+
def backtrace
|
|
79
|
+
@exception && @exception.backtrace
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Did the Chef run fail?
|
|
83
|
+
def failed?
|
|
84
|
+
!success?
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Did the chef run succeed? returns +true+ if no exception has been set.
|
|
88
|
+
def success?
|
|
89
|
+
@exception.nil?
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# A Hash representation of the RunStatus, with the following (Symbol) keys:
|
|
93
|
+
# * :node
|
|
94
|
+
# * :success
|
|
95
|
+
# * :start_time
|
|
96
|
+
# * :end_time
|
|
97
|
+
# * :elapsed_time
|
|
98
|
+
# * :all_resources
|
|
99
|
+
# * :updated_resources
|
|
100
|
+
# * :exception
|
|
101
|
+
# * :backtrace
|
|
102
|
+
def to_hash
|
|
103
|
+
# use a flat hash here so we can't errors from intermediate values being nil
|
|
104
|
+
{ :node => node,
|
|
105
|
+
:success => success?,
|
|
106
|
+
:start_time => start_time,
|
|
107
|
+
:end_time => end_time,
|
|
108
|
+
:elapsed_time => elapsed_time,
|
|
109
|
+
:all_resources => all_resources,
|
|
110
|
+
:updated_resources => updated_resources,
|
|
111
|
+
:exception => formatted_exception,
|
|
112
|
+
:backtrace => backtrace}
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Returns a string of the format "ExceptionClass: message" or +nil+ if no
|
|
116
|
+
# +exception+ is set.
|
|
117
|
+
def formatted_exception
|
|
118
|
+
@exception && "#{@exception.class.name}: #{@exception.message}"
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
data/lib/chef/runner.rb
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Christopher Walters (<cw@opscode.com>)
|
|
4
|
+
# Author:: Tim Hinderliter (<tim@opscode.com>)
|
|
5
|
+
# Copyright:: Copyright (c) 2008, 2010 Opscode, Inc.
|
|
6
|
+
# License:: Apache License, Version 2.0
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
require 'chef/mixin/params_validate'
|
|
22
|
+
require 'chef/node'
|
|
23
|
+
require 'chef/resource_collection'
|
|
24
|
+
require 'chef/platform'
|
|
25
|
+
|
|
26
|
+
class Chef
|
|
27
|
+
# == Chef::Runner
|
|
28
|
+
# This class is responsible for executing the steps in a Chef run.
|
|
29
|
+
class Runner
|
|
30
|
+
|
|
31
|
+
attr_reader :run_context
|
|
32
|
+
|
|
33
|
+
attr_reader :delayed_actions
|
|
34
|
+
|
|
35
|
+
include Chef::Mixin::ParamsValidate
|
|
36
|
+
|
|
37
|
+
def initialize(run_context)
|
|
38
|
+
@run_context = run_context
|
|
39
|
+
@delayed_actions = []
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def build_provider(resource)
|
|
43
|
+
provider_class = Chef::Platform.find_provider_for_node(run_context.node, resource)
|
|
44
|
+
Chef::Log.debug("#{resource} using #{provider_class.to_s}")
|
|
45
|
+
provider = provider_class.new(resource, run_context)
|
|
46
|
+
provider.load_current_resource
|
|
47
|
+
provider
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Determine the appropriate provider for the given resource, then
|
|
51
|
+
# execute it.
|
|
52
|
+
def run_action(resource, action)
|
|
53
|
+
resource.run_action(action)
|
|
54
|
+
|
|
55
|
+
# Execute any immediate and queue up any delayed notifications
|
|
56
|
+
# associated with the resource, but only if it was updated *this time*
|
|
57
|
+
# we ran an action on it.
|
|
58
|
+
if resource.updated_by_last_action?
|
|
59
|
+
resource.immediate_notifications.each do |notification|
|
|
60
|
+
Chef::Log.info("#{resource} sending #{notification.action} action to #{notification.resource} (immediate)")
|
|
61
|
+
run_action(notification.resource, notification.action)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
resource.delayed_notifications.each do |notification|
|
|
65
|
+
if delayed_actions.any? { |existing_notification| existing_notification.duplicates?(notification) }
|
|
66
|
+
Chef::Log.info( "#{resource} not queuing delayed action #{notification.action} on #{notification.resource}"\
|
|
67
|
+
" (delayed), as it's already been queued")
|
|
68
|
+
else
|
|
69
|
+
delayed_actions << notification
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Iterates over the +resource_collection+ in the +run_context+ calling
|
|
76
|
+
# +run_action+ for each resource in turn.
|
|
77
|
+
def converge
|
|
78
|
+
# Resolve all lazy/forward references in notifications
|
|
79
|
+
run_context.resource_collection.each do |resource|
|
|
80
|
+
resource.resolve_notification_references
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Execute each resource.
|
|
84
|
+
run_context.resource_collection.execute_each_resource do |resource|
|
|
85
|
+
begin
|
|
86
|
+
Chef::Log.debug("Processing #{resource} on #{run_context.node.name}")
|
|
87
|
+
|
|
88
|
+
# Execute each of this resource's actions.
|
|
89
|
+
Array(resource.action).each {|action| run_action(resource, action)}
|
|
90
|
+
rescue => e
|
|
91
|
+
Chef::Log.error("#{resource} (#{resource.source_line}) had an error:\n#{e}\n#{e.backtrace.join("\n")}")
|
|
92
|
+
raise e unless resource.ignore_failure
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Run all our :delayed actions
|
|
97
|
+
delayed_actions.each do |notification|
|
|
98
|
+
Chef::Log.info( "#{notification.notifying_resource} sending #{notification.action}"\
|
|
99
|
+
" action to #{notification.resource} (delayed)")
|
|
100
|
+
# Struct of resource/action to call
|
|
101
|
+
run_action(notification.resource, notification.action)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
true
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|