TrueCar-chef 0.10.0.beta.3
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 +171 -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/arch/etc/conf.d/chef-client.conf +5 -0
- data/distro/arch/etc/conf.d/chef-server-webui.conf +10 -0
- data/distro/arch/etc/conf.d/chef-server.conf +10 -0
- data/distro/arch/etc/conf.d/chef-solr-indexer.conf +8 -0
- data/distro/arch/etc/conf.d/chef-solr.conf +8 -0
- data/distro/arch/etc/rc.d/chef-client +76 -0
- data/distro/arch/etc/rc.d/chef-server +78 -0
- data/distro/arch/etc/rc.d/chef-server-webui +78 -0
- data/distro/arch/etc/rc.d/chef-solr +78 -0
- data/distro/arch/etc/rc.d/chef-solr-indexer +78 -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 +865 -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 +8 -0
- data/distro/debian/etc/default/chef-solr-indexer +7 -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 +176 -0
- data/distro/debian/etc/init.d/chef-solr-indexer +176 -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/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.rb +40 -0
- data/lib/chef/api_client.rb +264 -0
- data/lib/chef/application.rb +137 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +242 -0
- data/lib/chef/application/knife.rb +169 -0
- data/lib/chef/application/solo.rb +217 -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 +189 -0
- data/lib/chef/client.rb +362 -0
- data/lib/chef/config.rb +244 -0
- data/lib/chef/cookbook/chefignore.rb +66 -0
- data/lib/chef/cookbook/cookbook_collection.rb +45 -0
- data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
- data/lib/chef/cookbook/file_vendor.rb +48 -0
- data/lib/chef/cookbook/metadata.rb +592 -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 +103 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
- data/lib/chef/cookbook_uploader.rb +125 -0
- data/lib/chef/cookbook_version.rb +979 -0
- data/lib/chef/cookbook_version_selector.rb +163 -0
- data/lib/chef/couchdb.rb +247 -0
- data/lib/chef/daemon.rb +172 -0
- data/lib/chef/data_bag.rb +223 -0
- data/lib/chef/data_bag_item.rb +267 -0
- data/lib/chef/encrypted_data_bag_item.rb +126 -0
- data/lib/chef/environment.rb +386 -0
- data/lib/chef/exceptions.rb +153 -0
- data/lib/chef/file_access_control.rb +140 -0
- data/lib/chef/file_cache.rb +218 -0
- data/lib/chef/handler.rb +206 -0
- data/lib/chef/handler/json_file.rb +58 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/index_queue/amqp_client.rb +116 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +109 -0
- data/lib/chef/json_compat.rb +52 -0
- data/lib/chef/knife.rb +424 -0
- data/lib/chef/knife/bootstrap.rb +185 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +47 -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 +46 -0
- data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
- data/lib/chef/knife/client_bulk_delete.rb +43 -0
- data/lib/chef/knife/client_create.rb +73 -0
- data/lib/chef/knife/client_delete.rb +48 -0
- data/lib/chef/knife/client_edit.rb +48 -0
- data/lib/chef/knife/client_list.rb +43 -0
- data/lib/chef/knife/client_reregister.rb +59 -0
- data/lib/chef/knife/client_show.rb +53 -0
- data/lib/chef/knife/configure.rb +136 -0
- data/lib/chef/knife/configure_client.rb +52 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +61 -0
- data/lib/chef/knife/cookbook_create.rb +274 -0
- data/lib/chef/knife/cookbook_delete.rb +149 -0
- data/lib/chef/knife/cookbook_download.rb +134 -0
- data/lib/chef/knife/cookbook_list.rb +50 -0
- data/lib/chef/knife/cookbook_metadata.rb +102 -0
- data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
- data/lib/chef/knife/cookbook_show.rb +101 -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 +114 -0
- data/lib/chef/knife/cookbook_site_show.rb +57 -0
- data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
- data/lib/chef/knife/cookbook_site_vendor.rb +145 -0
- data/lib/chef/knife/cookbook_test.rb +82 -0
- data/lib/chef/knife/cookbook_upload.rb +146 -0
- data/lib/chef/knife/data_bag_create.rb +94 -0
- data/lib/chef/knife/data_bag_delete.rb +51 -0
- data/lib/chef/knife/data_bag_edit.rb +94 -0
- data/lib/chef/knife/data_bag_from_file.rb +85 -0
- data/lib/chef/knife/data_bag_list.rb +46 -0
- data/lib/chef/knife/data_bag_show.rb +81 -0
- 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 +51 -0
- data/lib/chef/knife/index_rebuild.rb +50 -0
- data/lib/chef/knife/node_bulk_delete.rb +46 -0
- data/lib/chef/knife/node_create.rb +50 -0
- data/lib/chef/knife/node_delete.rb +47 -0
- data/lib/chef/knife/node_edit.rb +163 -0
- data/lib/chef/knife/node_from_file.rb +45 -0
- data/lib/chef/knife/node_list.rb +46 -0
- data/lib/chef/knife/node_run_list_add.rb +67 -0
- data/lib/chef/knife/node_run_list_remove.rb +48 -0
- data/lib/chef/knife/node_show.rb +62 -0
- data/lib/chef/knife/recipe_list.rb +33 -0
- data/lib/chef/knife/role_bulk_delete.rb +47 -0
- data/lib/chef/knife/role_create.rb +55 -0
- data/lib/chef/knife/role_delete.rb +47 -0
- data/lib/chef/knife/role_edit.rb +48 -0
- data/lib/chef/knife/role_from_file.rb +49 -0
- data/lib/chef/knife/role_list.rb +43 -0
- data/lib/chef/knife/role_show.rb +54 -0
- data/lib/chef/knife/search.rb +123 -0
- data/lib/chef/knife/ssh.rb +318 -0
- data/lib/chef/knife/status.rb +90 -0
- 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 +227 -0
- data/lib/chef/knife/windows_bootstrap.rb +157 -0
- data/lib/chef/log.rb +39 -0
- data/lib/chef/mash.rb +211 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command.rb +221 -0
- data/lib/chef/mixin/command/unix.rb +215 -0
- data/lib/chef/mixin/command/windows.rb +76 -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/from_file.rb +50 -0
- data/lib/chef/mixin/language.rb +165 -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 +40 -0
- data/lib/chef/mixin/template.rb +95 -0
- data/lib/chef/mixin/xml_escape.rb +140 -0
- data/lib/chef/mixins.rb +15 -0
- data/lib/chef/monkey_patches/dir.rb +36 -0
- data/lib/chef/monkey_patches/numeric.rb +7 -0
- data/lib/chef/monkey_patches/regexp.rb +34 -0
- data/lib/chef/monkey_patches/string.rb +28 -0
- data/lib/chef/monkey_patches/tempfile.rb +64 -0
- data/lib/chef/nil_argument.rb +3 -0
- data/lib/chef/node.rb +661 -0
- data/lib/chef/node/attribute.rb +487 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +409 -0
- data/lib/chef/provider.rb +124 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +101 -0
- data/lib/chef/provider/cron.rb +186 -0
- data/lib/chef/provider/cron/solaris.rb +195 -0
- data/lib/chef/provider/deploy.rb +320 -0
- data/lib/chef/provider/deploy/revision.rb +80 -0
- data/lib/chef/provider/deploy/timestamped.rb +33 -0
- data/lib/chef/provider/directory.rb +72 -0
- data/lib/chef/provider/env.rb +152 -0
- data/lib/chef/provider/env/windows.rb +75 -0
- data/lib/chef/provider/erl_call.rb +100 -0
- data/lib/chef/provider/execute.rb +60 -0
- data/lib/chef/provider/file.rb +222 -0
- data/lib/chef/provider/git.rb +221 -0
- data/lib/chef/provider/group.rb +133 -0
- data/lib/chef/provider/group/aix.rb +70 -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 +81 -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/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.rb +117 -0
- data/lib/chef/provider/mount/mount.rb +232 -0
- data/lib/chef/provider/mount/windows.rb +80 -0
- data/lib/chef/provider/ohai.rb +41 -0
- data/lib/chef/provider/package.rb +160 -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 +136 -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 +135 -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 +261 -0
- data/lib/chef/provider/package/zypper.rb +133 -0
- data/lib/chef/provider/remote_directory.rb +138 -0
- data/lib/chef/provider/remote_file.rb +119 -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.rb +128 -0
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/debian.rb +130 -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/insserv.rb +52 -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 +146 -0
- data/lib/chef/provider/subversion.rb +194 -0
- data/lib/chef/provider/template.rb +105 -0
- data/lib/chef/provider/user.rb +187 -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/providers.rb +93 -0
- data/lib/chef/recipe.rb +128 -0
- data/lib/chef/resource.rb +530 -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 +57 -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 +99 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/gem_package.rb +53 -0
- data/lib/chef/resource/git.rb +37 -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 +147 -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_collection.rb +217 -0
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -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.rb +386 -0
- data/lib/chef/rest/auth_credentials.rb +71 -0
- data/lib/chef/rest/cookie_jar.rb +31 -0
- data/lib/chef/rest/rest_request.rb +188 -0
- data/lib/chef/role.rb +341 -0
- data/lib/chef/run_context.rb +126 -0
- data/lib/chef/run_list.rb +165 -0
- data/lib/chef/run_list/run_list_expansion.rb +193 -0
- data/lib/chef/run_list/run_list_item.rb +92 -0
- data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
- data/lib/chef/run_status.rb +121 -0
- data/lib/chef/runner.rb +99 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/search/query.rb +65 -0
- data/lib/chef/shef.rb +326 -0
- data/lib/chef/shef/ext.rb +569 -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 +284 -0
- data/lib/chef/shell_out.rb +238 -0
- data/lib/chef/shell_out/unix.rb +223 -0
- data/lib/chef/shell_out/windows.rb +98 -0
- data/lib/chef/solr_query.rb +187 -0
- data/lib/chef/solr_query/lucene.treetop +150 -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/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.rb +56 -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/version.rb +23 -0
- data/lib/chef/version_class.rb +70 -0
- data/lib/chef/version_constraint.rb +116 -0
- data/lib/chef/webui_user.rb +231 -0
- metadata +600 -0
|
@@ -0,0 +1,126 @@
|
|
|
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
|
+
require 'chef/resource_collection'
|
|
21
|
+
require 'chef/node'
|
|
22
|
+
require 'chef/role'
|
|
23
|
+
require 'chef/log'
|
|
24
|
+
require 'chef/mixin/language_include_recipe'
|
|
25
|
+
|
|
26
|
+
class Chef
|
|
27
|
+
# == Chef::RunContext
|
|
28
|
+
# Value object that loads and tracks the context of a Chef run
|
|
29
|
+
class RunContext
|
|
30
|
+
|
|
31
|
+
# Used to load the node's recipes after expanding its run list
|
|
32
|
+
include Chef::Mixin::LanguageIncludeRecipe
|
|
33
|
+
|
|
34
|
+
attr_reader :node, :cookbook_collection, :definitions
|
|
35
|
+
|
|
36
|
+
# Needs to be settable so deploy can run a resource_collection independent
|
|
37
|
+
# of any cookbooks.
|
|
38
|
+
attr_accessor :resource_collection
|
|
39
|
+
|
|
40
|
+
# Creates a new Chef::RunContext object and populates its fields. This object gets
|
|
41
|
+
# used by the Chef Server to generate a fully compiled recipe list for a node.
|
|
42
|
+
#
|
|
43
|
+
# === Returns
|
|
44
|
+
# object<Chef::RunContext>:: Duh. :)
|
|
45
|
+
def initialize(node, cookbook_collection)
|
|
46
|
+
@node = node
|
|
47
|
+
@cookbook_collection = cookbook_collection
|
|
48
|
+
@resource_collection = Chef::ResourceCollection.new
|
|
49
|
+
@definitions = Hash.new
|
|
50
|
+
|
|
51
|
+
# TODO: 5/18/2010 cw/timh - See note on Chef::Node's
|
|
52
|
+
# cookbook_collection attr_accessor
|
|
53
|
+
node.cookbook_collection = cookbook_collection
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def load(run_list_expansion)
|
|
57
|
+
load_libraries
|
|
58
|
+
load_lwrp_providers
|
|
59
|
+
load_lwrp_resources
|
|
60
|
+
load_attributes
|
|
61
|
+
load_resource_definitions
|
|
62
|
+
|
|
63
|
+
# Precendence rules state that roles' attributes come after
|
|
64
|
+
# cookbooks. Now we've loaded attributes from cookbooks with
|
|
65
|
+
# load_attributes, apply the expansion attributes (loaded from
|
|
66
|
+
# roles) to the node.
|
|
67
|
+
@node.apply_expansion_attributes(run_list_expansion)
|
|
68
|
+
|
|
69
|
+
run_list_expansion.recipes.each do |recipe|
|
|
70
|
+
# TODO: timh/cw, 5-14-2010: It's distasteful to be including
|
|
71
|
+
# the DSL in a class outside the context of the DSL
|
|
72
|
+
include_recipe(recipe)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def load_libraries
|
|
80
|
+
foreach_cookbook_load_segment(:libraries) do |cookbook_name, filename|
|
|
81
|
+
Chef::Log.debug("Loading cookbook #{cookbook_name}'s library file: #{filename}")
|
|
82
|
+
require filename
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def load_lwrp_providers
|
|
87
|
+
foreach_cookbook_load_segment(:providers) do |cookbook_name, filename|
|
|
88
|
+
Chef::Log.debug("Loading cookbook #{cookbook_name}'s providers from #{filename}")
|
|
89
|
+
Chef::Provider.build_from_file(cookbook_name, filename)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def load_lwrp_resources
|
|
94
|
+
foreach_cookbook_load_segment(:resources) do |cookbook_name, filename|
|
|
95
|
+
Chef::Log.debug("Loading cookbook #{cookbook_name}'s resources from #{filename}")
|
|
96
|
+
Chef::Resource.build_from_file(cookbook_name, filename)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def load_attributes
|
|
101
|
+
node.load_attributes
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def load_resource_definitions
|
|
105
|
+
foreach_cookbook_load_segment(:definitions) do |cookbook_name, filename|
|
|
106
|
+
Chef::Log.debug("Loading cookbook #{cookbook_name}'s definitions from #{filename}")
|
|
107
|
+
resourcelist = Chef::ResourceDefinitionList.new
|
|
108
|
+
resourcelist.from_file(filename)
|
|
109
|
+
definitions.merge!(resourcelist.defines) do |key, oldval, newval|
|
|
110
|
+
Chef::Log.info("Overriding duplicate definition #{key}, new found in #{filename}")
|
|
111
|
+
newval
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def foreach_cookbook_load_segment(segment, &block)
|
|
117
|
+
cookbook_collection.each do |cookbook_name, cookbook|
|
|
118
|
+
segment_filenames = cookbook.segment_filenames(segment)
|
|
119
|
+
segment_filenames.each do |segment_filename|
|
|
120
|
+
block.call(cookbook_name, segment_filename)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
end
|
|
126
|
+
end
|
|
@@ -0,0 +1,165 @@
|
|
|
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
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
|
7
|
+
# Copyright:: Copyright (c) 2008-2011 Opscode, Inc.
|
|
8
|
+
# License:: Apache License, Version 2.0
|
|
9
|
+
#
|
|
10
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
11
|
+
# you may not use this file except in compliance with the License.
|
|
12
|
+
# You may obtain a copy of the License at
|
|
13
|
+
#
|
|
14
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
15
|
+
#
|
|
16
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
17
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
19
|
+
# See the License for the specific language governing permissions and
|
|
20
|
+
# limitations under the License.
|
|
21
|
+
|
|
22
|
+
require 'chef/run_list/run_list_item'
|
|
23
|
+
require 'chef/run_list/run_list_expansion'
|
|
24
|
+
require 'chef/run_list/versioned_recipe_list'
|
|
25
|
+
require 'chef/mixin/params_validate'
|
|
26
|
+
|
|
27
|
+
class Chef
|
|
28
|
+
class RunList
|
|
29
|
+
include Enumerable
|
|
30
|
+
include Chef::Mixin::ParamsValidate
|
|
31
|
+
|
|
32
|
+
# @run_list_items is an array of RunListItems that describe the items to
|
|
33
|
+
# execute in order. RunListItems can load from and convert to the string
|
|
34
|
+
# forms users set on roles and nodes.
|
|
35
|
+
# For example:
|
|
36
|
+
# @run_list_items = ['recipe[foo::bar]', 'role[webserver]']
|
|
37
|
+
# Thus,
|
|
38
|
+
# self.role_names would return ['webserver']
|
|
39
|
+
# self.recipe_names would return ['foo::bar']
|
|
40
|
+
attr_reader :run_list_items
|
|
41
|
+
|
|
42
|
+
# For backwards compat
|
|
43
|
+
alias :run_list :run_list_items
|
|
44
|
+
|
|
45
|
+
def initialize(*run_list_items)
|
|
46
|
+
@run_list_items = run_list_items.map { |i| coerce_to_run_list_item(i) }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def role_names
|
|
50
|
+
@run_list_items.inject([]){|memo, run_list_item| memo << run_list_item.name if run_list_item.role? ; memo}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
alias :roles :role_names
|
|
54
|
+
|
|
55
|
+
def recipe_names
|
|
56
|
+
@run_list_items.inject([]){|memo, run_list_item| memo << run_list_item.name if run_list_item.recipe? ; memo}
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
alias :recipes :recipe_names
|
|
60
|
+
|
|
61
|
+
# Add an item of the form "recipe[foo::bar]" or "role[webserver]";
|
|
62
|
+
# takes a String or a RunListItem
|
|
63
|
+
def <<(run_list_item)
|
|
64
|
+
run_list_item = coerce_to_run_list_item(run_list_item)
|
|
65
|
+
@run_list_items << run_list_item unless @run_list_items.include?(run_list_item)
|
|
66
|
+
self
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
alias :push :<<
|
|
70
|
+
|
|
71
|
+
def ==(other)
|
|
72
|
+
if other.kind_of?(Chef::RunList)
|
|
73
|
+
other.run_list_items == @run_list_items
|
|
74
|
+
else
|
|
75
|
+
return false unless other.respond_to?(:size) && (other.size == @run_list_items.size)
|
|
76
|
+
other_run_list_items = other.dup
|
|
77
|
+
|
|
78
|
+
other_run_list_items.map! { |item| coerce_to_run_list_item(item) }
|
|
79
|
+
other_run_list_items == @run_list_items
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def to_s
|
|
84
|
+
@run_list_items.join(", ")
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def to_json(*args)
|
|
88
|
+
to_a.to_json(*args)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def empty?
|
|
92
|
+
@run_list_items.length == 0 ? true : false
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def [](pos)
|
|
96
|
+
@run_list_items[pos]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def []=(pos, item)
|
|
100
|
+
@run_list_items[pos] = parse_entry(item)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def each(&block)
|
|
104
|
+
@run_list_items.each { |i| block.call(i) }
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def each_index(&block)
|
|
108
|
+
@run_list_items.each_index { |i| block.call(i) }
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def include?(item)
|
|
112
|
+
@run_list_items.include?(parse_entry(item))
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def reset!(*args)
|
|
116
|
+
@run_list_items.clear
|
|
117
|
+
args.flatten.each do |item|
|
|
118
|
+
if item.kind_of?(Chef::RunList)
|
|
119
|
+
item.each { |r| self << r }
|
|
120
|
+
else
|
|
121
|
+
self << item
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
self
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def remove(item)
|
|
128
|
+
@run_list_items.delete_if{|i| i == item}
|
|
129
|
+
self
|
|
130
|
+
end
|
|
131
|
+
alias :delete :remove
|
|
132
|
+
|
|
133
|
+
# Expands this run_list: recursively expand roles into their included
|
|
134
|
+
# recipes.
|
|
135
|
+
# Returns a RunListExpansion object.
|
|
136
|
+
def expand(environment, data_source='server', expansion_opts={})
|
|
137
|
+
expansion = expansion_for_data_source(environment, data_source, expansion_opts)
|
|
138
|
+
expansion.expand
|
|
139
|
+
expansion
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Converts a string run list entry to a RunListItem object.
|
|
143
|
+
def parse_entry(entry)
|
|
144
|
+
RunListItem.new(entry)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def coerce_to_run_list_item(item)
|
|
148
|
+
item.kind_of?(RunListItem) ? item : parse_entry(item)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def expansion_for_data_source(environment, data_source, opts={})
|
|
152
|
+
case data_source.to_s
|
|
153
|
+
when 'disk'
|
|
154
|
+
RunListExpansionFromDisk.new(environment, @run_list_items)
|
|
155
|
+
when 'server'
|
|
156
|
+
RunListExpansionFromAPI.new(environment, @run_list_items, opts[:rest])
|
|
157
|
+
when 'couchdb'
|
|
158
|
+
RunListExpansionFromCouchDB.new(environment, @run_list_items, opts[:couchdb])
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
|
3
|
+
# Author:: Tim Hinderliter (<tim@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 2010, 2011 Opscode, Inc.
|
|
5
|
+
# License:: Apache License, Version 2.0
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
|
|
19
|
+
require 'chef/mash'
|
|
20
|
+
|
|
21
|
+
require 'chef/mixin/deep_merge'
|
|
22
|
+
|
|
23
|
+
require 'chef/role'
|
|
24
|
+
require 'chef/couchdb'
|
|
25
|
+
require 'chef/rest'
|
|
26
|
+
|
|
27
|
+
class Chef
|
|
28
|
+
class RunList
|
|
29
|
+
# Abstract Base class for expanding a run list. Subclasses must handle
|
|
30
|
+
# fetching roles from a data source by defining +fetch_role+
|
|
31
|
+
class RunListExpansion
|
|
32
|
+
|
|
33
|
+
attr_reader :run_list_items
|
|
34
|
+
|
|
35
|
+
# A VersionedRecipeList of recipes. Populated only after #expand
|
|
36
|
+
# is called.
|
|
37
|
+
attr_reader :recipes
|
|
38
|
+
|
|
39
|
+
attr_reader :default_attrs
|
|
40
|
+
|
|
41
|
+
attr_reader :override_attrs
|
|
42
|
+
|
|
43
|
+
attr_reader :errors
|
|
44
|
+
|
|
45
|
+
attr_reader :environment
|
|
46
|
+
|
|
47
|
+
# The data source passed to the constructor. Not used in this class.
|
|
48
|
+
# In subclasses, this is a couchdb or Chef::REST object pre-configured
|
|
49
|
+
# to fetch roles from their correct location.
|
|
50
|
+
attr_reader :source
|
|
51
|
+
|
|
52
|
+
def initialize(environment, run_list_items, source=nil)
|
|
53
|
+
@environment = environment
|
|
54
|
+
@errors = Array.new
|
|
55
|
+
|
|
56
|
+
@run_list_items = run_list_items.dup
|
|
57
|
+
@source = source
|
|
58
|
+
|
|
59
|
+
@default_attrs = Mash.new
|
|
60
|
+
@override_attrs = Mash.new
|
|
61
|
+
|
|
62
|
+
@recipes = Chef::RunList::VersionedRecipeList.new
|
|
63
|
+
|
|
64
|
+
@applied_roles = {}
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Did we find any errors (expanding roles)?
|
|
68
|
+
def errors?
|
|
69
|
+
@errors.length > 0
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
alias :invalid? :errors?
|
|
73
|
+
|
|
74
|
+
# Recurses over the run list items, expanding roles. After this,
|
|
75
|
+
# +recipes+ will contain the fully expanded recipe list
|
|
76
|
+
def expand
|
|
77
|
+
# Sure do miss function arity when being recursive
|
|
78
|
+
expand_run_list_items(@run_list_items)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Fetches and inflates a role
|
|
82
|
+
# === Returns
|
|
83
|
+
# Chef::Role in most cases
|
|
84
|
+
# false if the role has already been applied
|
|
85
|
+
# nil if the role does not exist
|
|
86
|
+
def inflate_role(role_name)
|
|
87
|
+
return false if applied_role?(role_name) # Prevent infinite loops
|
|
88
|
+
applied_role(role_name)
|
|
89
|
+
fetch_role(role_name)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def apply_role_attributes(role)
|
|
93
|
+
@default_attrs = Chef::Mixin::DeepMerge.merge(@default_attrs, role.default_attributes)
|
|
94
|
+
@override_attrs = Chef::Mixin::DeepMerge.merge(@override_attrs, role.override_attributes)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def applied_role?(role_name)
|
|
98
|
+
@applied_roles.has_key?(role_name)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Returns an array of role names that were expanded; this
|
|
102
|
+
# includes any roles that were in the original, pre-expansion
|
|
103
|
+
# run_list as well as roles processed during
|
|
104
|
+
# expansion. Populated only after #expand is called.
|
|
105
|
+
def roles
|
|
106
|
+
@applied_roles.keys
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# In subclasses, this method will fetch the role from the data source.
|
|
110
|
+
def fetch_role(name)
|
|
111
|
+
raise NotImplementedError
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# When a role is not found, an error message is logged, but no
|
|
115
|
+
# exception is raised. We do add an entry in the errors collection.
|
|
116
|
+
# === Returns
|
|
117
|
+
# nil
|
|
118
|
+
def role_not_found(name)
|
|
119
|
+
Chef::Log.error("Role #{name} is in the runlist but does not exist. Skipping expand.")
|
|
120
|
+
@errors << name
|
|
121
|
+
nil
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
private
|
|
125
|
+
|
|
126
|
+
# these methods modifies internal state based on arguments, so hide it.
|
|
127
|
+
|
|
128
|
+
def applied_role(role_name)
|
|
129
|
+
@applied_roles[role_name] = true
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def expand_run_list_items(items)
|
|
133
|
+
if entry = items.shift
|
|
134
|
+
case entry.type
|
|
135
|
+
when :recipe
|
|
136
|
+
recipes.add_recipe(entry.name, entry.version)
|
|
137
|
+
when :role
|
|
138
|
+
if role = inflate_role(entry.name)
|
|
139
|
+
expand_run_list_items(role.run_list_for(@environment).run_list_items)
|
|
140
|
+
apply_role_attributes(role)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
expand_run_list_items(items)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Expand a run list from disk. Suitable for chef-solo
|
|
150
|
+
class RunListExpansionFromDisk < RunListExpansion
|
|
151
|
+
|
|
152
|
+
def fetch_role(name)
|
|
153
|
+
Chef::Role.from_disk(name)
|
|
154
|
+
rescue Chef::Exceptions::RoleNotFound
|
|
155
|
+
role_not_found(name)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Expand a run list from the chef-server API.
|
|
161
|
+
class RunListExpansionFromAPI < RunListExpansion
|
|
162
|
+
|
|
163
|
+
def rest
|
|
164
|
+
@rest ||= (source || Chef::REST.new(Chef::Config[:role_url]))
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def fetch_role(name)
|
|
168
|
+
rest.get_rest("roles/#{name}")
|
|
169
|
+
rescue Net::HTTPServerException => e
|
|
170
|
+
if e.message == '404 "Not Found"'
|
|
171
|
+
role_not_found(name)
|
|
172
|
+
else
|
|
173
|
+
raise
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Expand a run list from couchdb. Used in chef-server-api
|
|
179
|
+
class RunListExpansionFromCouchDB < RunListExpansion
|
|
180
|
+
|
|
181
|
+
def couchdb
|
|
182
|
+
source
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def fetch_role(name)
|
|
186
|
+
Chef::Role.cdb_load(name, couchdb)
|
|
187
|
+
rescue Chef::Exceptions::CouchDBNotFound
|
|
188
|
+
role_not_found(name)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|