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,92 @@
|
|
|
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\[([^\]@]+)(@([0-9]+(\.[0-9]+){1,2}))?\]$}
|
|
22
|
+
QUALIFIED_ROLE = %r{^role\[([^\]]+)\]$}
|
|
23
|
+
VERSIONED_UNQUALIFIED_RECIPE = %r{^([^@]+)(@([0-9]+(\.[0-9]+){1,2}))$}
|
|
24
|
+
|
|
25
|
+
attr_reader :name, :type, :version
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def initialize(item)
|
|
29
|
+
@version = nil
|
|
30
|
+
case item
|
|
31
|
+
when Hash
|
|
32
|
+
assert_hash_is_valid_run_list_item!(item)
|
|
33
|
+
@type = (item['type'] || item[:type]).to_sym
|
|
34
|
+
@name = item['name'] || item[:name]
|
|
35
|
+
if (item.has_key?('version') || item.has_key?(:version))
|
|
36
|
+
@version = item['version'] || item[:version]
|
|
37
|
+
end
|
|
38
|
+
when String
|
|
39
|
+
if match = QUALIFIED_RECIPE.match(item)
|
|
40
|
+
# recipe[recipe_name]
|
|
41
|
+
# recipe[recipe_name@1.0.0]
|
|
42
|
+
@type = :recipe
|
|
43
|
+
@name = match[1]
|
|
44
|
+
@version = match[3] if match[3]
|
|
45
|
+
elsif match = QUALIFIED_ROLE.match(item)
|
|
46
|
+
# role[role_name]
|
|
47
|
+
@type = :role
|
|
48
|
+
@name = match[1]
|
|
49
|
+
elsif match = VERSIONED_UNQUALIFIED_RECIPE.match(item)
|
|
50
|
+
# recipe_name@1.0.0
|
|
51
|
+
@type = :recipe
|
|
52
|
+
@name = match[1]
|
|
53
|
+
@version = match[3] if match[3]
|
|
54
|
+
else
|
|
55
|
+
# recipe_name
|
|
56
|
+
@type = :recipe
|
|
57
|
+
@name = item
|
|
58
|
+
end
|
|
59
|
+
else
|
|
60
|
+
raise ArgumentError, "Unable to create #{self.class} from #{item.class}:#{item.inspect}: must be a Hash or String"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def to_s
|
|
65
|
+
"#{@type}[#{@name}#{@version ? "@#{@version}" :""}]"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def role?
|
|
69
|
+
@type == :role
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def recipe?
|
|
73
|
+
@type == :recipe
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def ==(other)
|
|
77
|
+
if other.kind_of?(String)
|
|
78
|
+
self.to_s == other.to_s
|
|
79
|
+
else
|
|
80
|
+
other.respond_to?(:type) && other.respond_to?(:name) && other.respond_to?(:version) && other.type == @type && other.name == @name && other.version == @version
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def assert_hash_is_valid_run_list_item!(item)
|
|
85
|
+
unless (item.key?('type')|| item.key?(:type)) && (item.key?('name') || item.key?(:name))
|
|
86
|
+
raise ArgumentError, "Initializing a #{self.class} from a hash requires that it have a 'type' and 'name' key"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Stephen Delano (<stephen@opscode.com>)
|
|
3
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright 2010 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
|
+
require 'chef/version_class'
|
|
19
|
+
require 'chef/version_constraint'
|
|
20
|
+
|
|
21
|
+
# Why does this class exist?
|
|
22
|
+
# Why did we not just modify RunList/RunListItem?
|
|
23
|
+
class Chef
|
|
24
|
+
class RunList
|
|
25
|
+
class VersionedRecipeList < Array
|
|
26
|
+
|
|
27
|
+
def initialize
|
|
28
|
+
super
|
|
29
|
+
@versions = Hash.new
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def add_recipe(name, version=nil)
|
|
33
|
+
if version && @versions.has_key?(name)
|
|
34
|
+
unless Chef::Version.new(@versions[name]) == Chef::Version.new(version)
|
|
35
|
+
raise Chef::Exceptions::CookbookVersionConflict, "Run list requires #{name} at versions #{@versions[name]} and #{version}"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
@versions[name] = version if version
|
|
39
|
+
self << name unless self.include?(name)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def with_versions
|
|
43
|
+
self.map {|recipe_name| {:name => recipe_name, :version => @versions[recipe_name]}}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Return an Array of Hashes, each of the form:
|
|
47
|
+
# {:name => RECIPE_NAME, :version_constraint => Chef::VersionConstraint }
|
|
48
|
+
def with_version_constraints
|
|
49
|
+
self.map do |recipe_name|
|
|
50
|
+
constraint = Chef::VersionConstraint.new(@versions[recipe_name])
|
|
51
|
+
{ :name => recipe_name, :version_constraint => constraint }
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Return an Array of Strings, each of the form:
|
|
56
|
+
# "NAME@VERSION"
|
|
57
|
+
def with_version_constraints_strings
|
|
58
|
+
self.map do |recipe_name|
|
|
59
|
+
if @versions[recipe_name]
|
|
60
|
+
"#{recipe_name}@#{@versions[recipe_name]}"
|
|
61
|
+
else
|
|
62
|
+
recipe_name
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -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,99 @@
|
|
|
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
|
+
# Determine the appropriate provider for the given resource, then
|
|
43
|
+
# execute it.
|
|
44
|
+
def run_action(resource, action)
|
|
45
|
+
resource.run_action(action)
|
|
46
|
+
|
|
47
|
+
# Execute any immediate and queue up any delayed notifications
|
|
48
|
+
# associated with the resource, but only if it was updated *this time*
|
|
49
|
+
# we ran an action on it.
|
|
50
|
+
if resource.updated_by_last_action?
|
|
51
|
+
resource.immediate_notifications.each do |notification|
|
|
52
|
+
Chef::Log.info("#{resource} sending #{notification.action} action to #{notification.resource} (immediate)")
|
|
53
|
+
run_action(notification.resource, notification.action)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
resource.delayed_notifications.each do |notification|
|
|
57
|
+
if delayed_actions.any? { |existing_notification| existing_notification.duplicates?(notification) }
|
|
58
|
+
Chef::Log.info( "#{resource} not queuing delayed action #{notification.action} on #{notification.resource}"\
|
|
59
|
+
" (delayed), as it's already been queued")
|
|
60
|
+
else
|
|
61
|
+
delayed_actions << notification
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Iterates over the +resource_collection+ in the +run_context+ calling
|
|
68
|
+
# +run_action+ for each resource in turn.
|
|
69
|
+
def converge
|
|
70
|
+
# Resolve all lazy/forward references in notifications
|
|
71
|
+
run_context.resource_collection.each do |resource|
|
|
72
|
+
resource.resolve_notification_references
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Execute each resource.
|
|
76
|
+
run_context.resource_collection.execute_each_resource do |resource|
|
|
77
|
+
begin
|
|
78
|
+
Chef::Log.debug("Processing #{resource} on #{run_context.node.name}")
|
|
79
|
+
|
|
80
|
+
# Execute each of this resource's actions.
|
|
81
|
+
Array(resource.action).each {|action| run_action(resource, action)}
|
|
82
|
+
rescue => e
|
|
83
|
+
Chef::Log.error("#{resource} (#{resource.source_line}) had an error:\n#{e}\n#{e.backtrace.join("\n")}")
|
|
84
|
+
raise e unless resource.ignore_failure
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Run all our :delayed actions
|
|
89
|
+
delayed_actions.each do |notification|
|
|
90
|
+
Chef::Log.info( "#{notification.notifying_resource} sending #{notification.action}"\
|
|
91
|
+
" action to #{notification.resource} (delayed)")
|
|
92
|
+
# Struct of resource/action to call
|
|
93
|
+
run_action(notification.resource, notification.action)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
true
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
data/lib/chef/sandbox.rb
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Tim Hinderliter (<tim@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
|
+
require 'chef/log'
|
|
19
|
+
require 'uuidtools'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Sandbox
|
|
23
|
+
attr_accessor :is_completed, :create_time
|
|
24
|
+
alias_method :is_completed?, :is_completed
|
|
25
|
+
attr_reader :guid
|
|
26
|
+
|
|
27
|
+
alias :name :guid
|
|
28
|
+
|
|
29
|
+
attr_accessor :couchdb, :couchdb_id, :couchdb_rev
|
|
30
|
+
|
|
31
|
+
# list of checksum ids
|
|
32
|
+
attr_accessor :checksums
|
|
33
|
+
|
|
34
|
+
DESIGN_DOCUMENT = {
|
|
35
|
+
"version" => 1,
|
|
36
|
+
"language" => "javascript",
|
|
37
|
+
"views" => {
|
|
38
|
+
"all" => {
|
|
39
|
+
"map" => <<-EOJS
|
|
40
|
+
function(doc) {
|
|
41
|
+
if (doc.chef_type == "sandbox") {
|
|
42
|
+
emit(doc.guid, doc);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
EOJS
|
|
46
|
+
},
|
|
47
|
+
"all_id" => {
|
|
48
|
+
"map" => <<-EOJS
|
|
49
|
+
function(doc) {
|
|
50
|
+
if (doc.chef_type == "sandbox") {
|
|
51
|
+
emit(doc.guid, doc.guid);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
EOJS
|
|
55
|
+
},
|
|
56
|
+
"all_incomplete" => {
|
|
57
|
+
"map" => <<-EOJS
|
|
58
|
+
function(doc) {
|
|
59
|
+
if (doc.chef_type == "sandbox" && !doc.is_completed) {
|
|
60
|
+
emit(doc.guid, doc.guid);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
EOJS
|
|
64
|
+
},
|
|
65
|
+
"all_completed" => {
|
|
66
|
+
"map" => <<-EOJS
|
|
67
|
+
function(doc) {
|
|
68
|
+
if (doc.chef_type == "sandbox" && doc.is_completed) {
|
|
69
|
+
emit(doc.guid, doc.guid);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
EOJS
|
|
73
|
+
},
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# Creates a new Chef::Sandbox object.
|
|
78
|
+
#
|
|
79
|
+
# === Returns
|
|
80
|
+
# object<Chef::Sandbox>:: Duh. :)
|
|
81
|
+
def initialize(guid=nil, couchdb=nil)
|
|
82
|
+
@guid = guid || UUIDTools::UUID.random_create.to_s.gsub(/\-/,'').downcase
|
|
83
|
+
@is_completed = false
|
|
84
|
+
@create_time = Time.now.iso8601
|
|
85
|
+
@checksums = Array.new
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def include?(checksum)
|
|
89
|
+
@checksums.include?(checksum)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
alias :member? :include?
|
|
93
|
+
|
|
94
|
+
def to_json(*a)
|
|
95
|
+
result = {
|
|
96
|
+
:guid => guid,
|
|
97
|
+
:name => name, # same as guid, used for id_map
|
|
98
|
+
:checksums => checksums,
|
|
99
|
+
:create_time => create_time,
|
|
100
|
+
:is_completed => is_completed,
|
|
101
|
+
:json_class => self.class.name,
|
|
102
|
+
:chef_type => 'sandbox'
|
|
103
|
+
}
|
|
104
|
+
result["_rev"] = @couchdb_rev if @couchdb_rev
|
|
105
|
+
result.to_json(*a)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def self.json_create(o)
|
|
109
|
+
sandbox = new(o['guid'])
|
|
110
|
+
sandbox.checksums = o['checksums']
|
|
111
|
+
sandbox.create_time = o['create_time']
|
|
112
|
+
sandbox.is_completed = o['is_completed']
|
|
113
|
+
if o.has_key?('_rev')
|
|
114
|
+
sandbox.couchdb_rev = o["_rev"]
|
|
115
|
+
o.delete("_rev")
|
|
116
|
+
end
|
|
117
|
+
if o.has_key?("_id")
|
|
118
|
+
sandbox.couchdb_id = o["_id"]
|
|
119
|
+
#sandbox.index_id = sandbox.couchdb_id
|
|
120
|
+
o.delete("_id")
|
|
121
|
+
end
|
|
122
|
+
sandbox
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
##
|
|
126
|
+
# Couchdb
|
|
127
|
+
##
|
|
128
|
+
|
|
129
|
+
def self.create_design_document(couchdb=nil)
|
|
130
|
+
(couchdb || Chef::CouchDB.new).create_design_document("sandboxes", DESIGN_DOCUMENT)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def self.cdb_list(inflate=false, couchdb=nil)
|
|
134
|
+
rs = (couchdb || Chef::CouchDB.new).list("sandboxes", inflate)
|
|
135
|
+
lookup = (inflate ? "value" : "key")
|
|
136
|
+
rs["rows"].collect { |r| r[lookup] }
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def self.cdb_load(guid, couchdb=nil)
|
|
140
|
+
# Probably want to look for a view here at some point
|
|
141
|
+
(couchdb || Chef::CouchDB.new).load("sandbox", guid)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def cdb_destroy
|
|
145
|
+
(couchdb || Chef::CouchDB.new).delete("sandbox", guid, @couchdb_rev)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def cdb_save(couchdb=nil)
|
|
149
|
+
@couchdb_rev = (couchdb || Chef::CouchDB.new).store("sandbox", guid, self)["rev"]
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
end
|
|
153
|
+
end
|