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,56 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/knife'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Knife
|
|
23
|
+
class CookbookSiteList < Knife
|
|
24
|
+
|
|
25
|
+
banner "knife cookbook site list (options)"
|
|
26
|
+
category "cookbook site"
|
|
27
|
+
|
|
28
|
+
option :with_uri,
|
|
29
|
+
:short => "-w",
|
|
30
|
+
:long => "--with-uri",
|
|
31
|
+
:description => "Show corresponding URIs"
|
|
32
|
+
|
|
33
|
+
def run
|
|
34
|
+
output(format_list_for_display(get_cookbook_list))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def get_cookbook_list(items=10, start=0, cookbook_collection={})
|
|
38
|
+
cookbooks_url = "http://cookbooks.opscode.com/api/v1/cookbooks?items=#{items}&start=#{start}"
|
|
39
|
+
cr = rest.get_rest(cookbooks_url)
|
|
40
|
+
cr["items"].each do |cookbook|
|
|
41
|
+
cookbook_collection[cookbook["cookbook_name"]] = cookbook
|
|
42
|
+
end
|
|
43
|
+
new_start = start + cr["items"].length
|
|
44
|
+
if new_start < cr["total"]
|
|
45
|
+
get_cookbook_list(items, new_start, cookbook_collection)
|
|
46
|
+
else
|
|
47
|
+
cookbook_collection
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
2
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
require 'chef/knife'
|
|
19
|
+
|
|
20
|
+
class Chef
|
|
21
|
+
class Knife
|
|
22
|
+
class CookbookSiteSearch < Knife
|
|
23
|
+
|
|
24
|
+
banner "knife cookbook site search QUERY (options)"
|
|
25
|
+
category "cookbook site"
|
|
26
|
+
|
|
27
|
+
def run
|
|
28
|
+
output(search_cookbook(name_args[0]))
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def search_cookbook(query, items=10, start=0, cookbook_collection={})
|
|
32
|
+
cookbooks_url = "http://cookbooks.opscode.com/api/v1/search?q=#{query}&items=#{items}&start=#{start}"
|
|
33
|
+
cr = rest.get_rest(cookbooks_url)
|
|
34
|
+
cr["items"].each do |cookbook|
|
|
35
|
+
cookbook_collection[cookbook["cookbook_name"]] = cookbook
|
|
36
|
+
end
|
|
37
|
+
new_start = start + cr["items"].length
|
|
38
|
+
if new_start < cr["total"]
|
|
39
|
+
search_cookbook(query, items, new_start, cookbook_collection)
|
|
40
|
+
else
|
|
41
|
+
cookbook_collection
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Author:: Nuo Yan (<nuo@opscode.com>)
|
|
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
|
+
|
|
19
|
+
require 'chef/knife'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Knife
|
|
23
|
+
class CookbookSiteShare < Knife
|
|
24
|
+
|
|
25
|
+
deps do
|
|
26
|
+
require 'chef/cookbook_uploader'
|
|
27
|
+
require 'chef/cookbook_site_streaming_uploader'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
banner "knife cookbook site share COOKBOOK CATEGORY (options)"
|
|
31
|
+
category "cookbook site"
|
|
32
|
+
|
|
33
|
+
option :cookbook_path,
|
|
34
|
+
:short => "-o PATH:PATH",
|
|
35
|
+
:long => "--cookbook-path PATH:PATH",
|
|
36
|
+
:description => "A colon-separated path to look for cookbooks in",
|
|
37
|
+
:proc => lambda { |o| Chef::Config.cookbook_path = o.split(":") }
|
|
38
|
+
|
|
39
|
+
def run
|
|
40
|
+
if @name_args.length < 2
|
|
41
|
+
show_usage
|
|
42
|
+
ui.fatal("You must specify the cookbook name and the category you want to share this cookbook to.")
|
|
43
|
+
exit 1
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
config[:cookbook_path] ||= Chef::Config[:cookbook_path]
|
|
47
|
+
|
|
48
|
+
cookbook_name = @name_args[0]
|
|
49
|
+
category = @name_args[1]
|
|
50
|
+
cl = Chef::CookbookLoader.new(config[:cookbook_path])
|
|
51
|
+
if cl.cookbook_exists?(cookbook_name)
|
|
52
|
+
cookbook = cl[cookbook_name]
|
|
53
|
+
Chef::CookbookUploader.validate_cookbook(cookbook)
|
|
54
|
+
tmp_cookbook_dir = Chef::CookbookSiteStreamingUploader.create_build_dir(cookbook)
|
|
55
|
+
begin
|
|
56
|
+
Chef::Log.debug("temp cookbook directory is #{tmp_cookbook_dir.inspect}")
|
|
57
|
+
ui.info("Making tarball #{cookbook_name}.tgz")
|
|
58
|
+
Chef::Mixin::Command.run_command(:command => "tar -czf #{cookbook_name}.tgz #{cookbook_name}", :cwd => tmp_cookbook_dir)
|
|
59
|
+
rescue => e
|
|
60
|
+
ui.error("Error making tarball #{cookbook_name}.tgz: #{e.message}. Set log level to debug (-l debug) for more information.")
|
|
61
|
+
Chef::Log.debug("\n#{e.backtrace.join("\n")}")
|
|
62
|
+
exit(1)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
begin
|
|
66
|
+
do_upload("#{tmp_cookbook_dir}/#{cookbook_name}.tgz", category, Chef::Config[:node_name], Chef::Config[:client_key])
|
|
67
|
+
ui.info("Upload complete!")
|
|
68
|
+
Chef::Log.debug("Removing local staging directory at #{tmp_cookbook_dir}")
|
|
69
|
+
FileUtils.rm_rf tmp_cookbook_dir
|
|
70
|
+
rescue => e
|
|
71
|
+
ui.error("Error uploading cookbook #{cookbook_name} to the Opscode Cookbook Site: #{e.message}. Set log level to debug (-l debug) for more information.")
|
|
72
|
+
Chef::Log.debug("\n#{e.backtrace.join("\n")}")
|
|
73
|
+
exit(1)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
else
|
|
77
|
+
ui.error("Could not find cookbook #{cookbook_name} in your cookbook path.")
|
|
78
|
+
exit(1)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def do_upload(cookbook_filename, cookbook_category, user_id, user_secret_filename)
|
|
84
|
+
uri = "http://cookbooks.opscode.com/api/v1/cookbooks"
|
|
85
|
+
|
|
86
|
+
category_string = { 'category'=>cookbook_category }.to_json
|
|
87
|
+
|
|
88
|
+
http_resp = Chef::CookbookSiteStreamingUploader.post(uri, user_id, user_secret_filename, {
|
|
89
|
+
:tarball => File.open(cookbook_filename),
|
|
90
|
+
:cookbook => category_string
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
res = Chef::JSONCompat.from_json(http_resp.body)
|
|
94
|
+
if http_resp.code.to_i != 201
|
|
95
|
+
if res['error_messages']
|
|
96
|
+
if res['error_messages'][0] =~ /Version already exists/
|
|
97
|
+
ui.error "The same version of this cookbook already exists on the Opscode Cookbook Site."
|
|
98
|
+
exit(1)
|
|
99
|
+
else
|
|
100
|
+
ui.error "#{res['error_messages'][0]}"
|
|
101
|
+
exit(1)
|
|
102
|
+
end
|
|
103
|
+
else
|
|
104
|
+
ui.error "Unknown error while sharing cookbook"
|
|
105
|
+
ui.error "Server response: #{http_resp.body}"
|
|
106
|
+
exit(1)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
res
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
2
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
require 'chef/knife'
|
|
19
|
+
|
|
20
|
+
class Chef
|
|
21
|
+
class Knife
|
|
22
|
+
class CookbookSiteShow < Knife
|
|
23
|
+
|
|
24
|
+
banner "knife cookbook site show COOKBOOK [VERSION] (options)"
|
|
25
|
+
category "cookbook site"
|
|
26
|
+
|
|
27
|
+
def run
|
|
28
|
+
case @name_args.length
|
|
29
|
+
when 1
|
|
30
|
+
cookbook_data = rest.get_rest("http://cookbooks.opscode.com/api/v1/cookbooks/#{@name_args[0]}")
|
|
31
|
+
when 2
|
|
32
|
+
cookbook_data = rest.get_rest("http://cookbooks.opscode.com/api/v1/cookbooks/#{@name_args[0]}/versions/#{name_args[1].gsub('.', '_')}")
|
|
33
|
+
end
|
|
34
|
+
output(format_for_display(cookbook_data))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def get_cookbook_list(items=10, start=0, cookbook_collection={})
|
|
38
|
+
cookbooks_url = "http://cookbooks.opscode.com/api/v1/cookbooks?items=#{items}&start=#{start}"
|
|
39
|
+
cr = rest.get_rest(cookbooks_url)
|
|
40
|
+
cr["items"].each do |cookbook|
|
|
41
|
+
cookbook_collection[cookbook["cookbook_name"]] = cookbook
|
|
42
|
+
end
|
|
43
|
+
new_start = start + cr["items"].length
|
|
44
|
+
if new_start < cr["total"]
|
|
45
|
+
get_cookbook_list(items, new_start, cookbook_collection)
|
|
46
|
+
else
|
|
47
|
+
cookbook_collection
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Stephen Delano (<stephen@opscode.com>)
|
|
3
|
+
# Author:: Tim Hinderliter (<tim@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 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
|
+
#
|
|
19
|
+
|
|
20
|
+
require 'chef/knife'
|
|
21
|
+
|
|
22
|
+
class Chef
|
|
23
|
+
class Knife
|
|
24
|
+
class CookbookSiteUnshare < Knife
|
|
25
|
+
|
|
26
|
+
deps do
|
|
27
|
+
require 'chef/json_compat'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
banner "knife cookbook site unshare COOKBOOK"
|
|
31
|
+
category "cookbook site"
|
|
32
|
+
|
|
33
|
+
def run
|
|
34
|
+
@cookbook_name = @name_args[0]
|
|
35
|
+
if @cookbook_name.nil?
|
|
36
|
+
show_usage
|
|
37
|
+
ui.fatal "You must provide the name of the cookbook to unshare"
|
|
38
|
+
exit 1
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
confirm "Do you really want to unshare the cookbook #{@cookbook_name}"
|
|
42
|
+
|
|
43
|
+
begin
|
|
44
|
+
rest.delete_rest "http://cookbooks.opscode.com/api/v1/cookbooks/#{@name_args[0]}"
|
|
45
|
+
rescue Net::HTTPServerException => e
|
|
46
|
+
raise e unless e.message =~ /Forbidden/
|
|
47
|
+
ui.error "Forbidden: You must be the maintainer of #{@cookbook_name} to unshare it."
|
|
48
|
+
exit 1
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
ui.info "Unshared cookbook #{@cookbook_name}"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@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
|
+
require 'chef/knife'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Knife
|
|
23
|
+
class CookbookSiteVendor < Knife
|
|
24
|
+
|
|
25
|
+
deps do
|
|
26
|
+
require 'chef/mixin/shell_out'
|
|
27
|
+
require 'chef/cookbook/metadata'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
banner "knife cookbook site vendor COOKBOOK [VERSION] (options)"
|
|
31
|
+
category "cookbook site"
|
|
32
|
+
|
|
33
|
+
option :deps,
|
|
34
|
+
:short => "-d",
|
|
35
|
+
:long => "--dependencies",
|
|
36
|
+
:boolean => true,
|
|
37
|
+
:description => "Grab dependencies automatically"
|
|
38
|
+
|
|
39
|
+
option :cookbook_path,
|
|
40
|
+
:short => "-o PATH:PATH",
|
|
41
|
+
:long => "--cookbook-path PATH:PATH",
|
|
42
|
+
:description => "A colon-separated path to look for cookbooks in",
|
|
43
|
+
:proc => lambda { |o| o.split(":") }
|
|
44
|
+
|
|
45
|
+
option :branch_default,
|
|
46
|
+
:short => "-B BRANCH",
|
|
47
|
+
:long => "--branch BRANCH",
|
|
48
|
+
:description => "Default branch to work with",
|
|
49
|
+
:default => "master"
|
|
50
|
+
|
|
51
|
+
def run
|
|
52
|
+
extend Chef::Mixin::ShellOut
|
|
53
|
+
|
|
54
|
+
if config[:cookbook_path]
|
|
55
|
+
Chef::Config[:cookbook_path] = config[:cookbook_path]
|
|
56
|
+
else
|
|
57
|
+
config[:cookbook_path] = Chef::Config[:cookbook_path]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Check to ensure we have a valid source of cookbooks before continuing
|
|
61
|
+
unless File.directory?(config[:cookbook_path].first)
|
|
62
|
+
ui.error( File.join(config[:cookbook_path].first, " doesn't exist!. Make sure you have cookbook_path configured correctly"))
|
|
63
|
+
exit 1
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
vendor_path = File.expand_path(File.join(config[:cookbook_path].first))
|
|
67
|
+
cookbook_path = File.join(vendor_path, name_args[0])
|
|
68
|
+
upstream_file = File.join(vendor_path, "#{name_args[0]}.tar.gz")
|
|
69
|
+
branch_name = "chef-vendor-#{name_args[0]}"
|
|
70
|
+
|
|
71
|
+
download = Chef::Knife::CookbookSiteDownload.new
|
|
72
|
+
download.config[:file] = upstream_file
|
|
73
|
+
download.name_args = name_args
|
|
74
|
+
download.run
|
|
75
|
+
|
|
76
|
+
ui.info("Checking out the #{config[:branch_default]} branch.")
|
|
77
|
+
shell_out!("git checkout #{config[:branch_default]}", :cwd => vendor_path)
|
|
78
|
+
ui.info("Checking the status of the vendor branch.")
|
|
79
|
+
status, branch_output, branch_error = Chef::Mixin::Command.output_of_command("git branch --no-color | grep #{branch_name}", :cwd => vendor_path)
|
|
80
|
+
if branch_output =~ /#{Regexp.escape(branch_name)}$/m
|
|
81
|
+
ui.info("Vendor branch found.")
|
|
82
|
+
shell_out!("git checkout #{branch_name}", :cwd => vendor_path)
|
|
83
|
+
else
|
|
84
|
+
ui.info("Creating vendor branch.")
|
|
85
|
+
shell_out!("git checkout -b #{branch_name}", :cwd => vendor_path)
|
|
86
|
+
end
|
|
87
|
+
ui.info("Removing pre-existing version.")
|
|
88
|
+
shell_out!("rm -r #{cookbook_path}", :cwd => vendor_path) if File.directory?(cookbook_path)
|
|
89
|
+
ui.info("Uncompressing #{name_args[0]} version #{download.version}.")
|
|
90
|
+
shell_out!("tar zxvf #{upstream_file}", :cwd => vendor_path)
|
|
91
|
+
shell_out!("rm #{upstream_file}", :cwd => vendor_path)
|
|
92
|
+
ui.info("Adding changes.")
|
|
93
|
+
shell_out!("git add #{name_args[0]}", :cwd => vendor_path)
|
|
94
|
+
|
|
95
|
+
ui.info("Committing changes.")
|
|
96
|
+
changes = true
|
|
97
|
+
begin
|
|
98
|
+
shell_out!("git commit -a -m 'Import #{name_args[0]} version #{download.version}'", :cwd => vendor_path)
|
|
99
|
+
rescue Chef::Exceptions::Exec => e
|
|
100
|
+
ui.warn("Checking out the #{config[:branch_default]} branch.")
|
|
101
|
+
ui.warn("No changes from current vendor #{name_args[0]}")
|
|
102
|
+
shell_out!("git checkout #{config[:branch_default]}", :cwd => vendor_path)
|
|
103
|
+
changes = false
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
if changes
|
|
107
|
+
ui.info("Creating tag chef-vendor-#{name_args[0]}-#{download.version}.")
|
|
108
|
+
shell_out!("git tag -f chef-vendor-#{name_args[0]}-#{download.version}", :cwd => vendor_path)
|
|
109
|
+
ui.info("Checking out the #{config[:branch_default]} branch.")
|
|
110
|
+
shell_out!("git checkout #{config[:branch_default]}", :cwd => vendor_path)
|
|
111
|
+
ui.info("Merging changes from #{name_args[0]} version #{download.version}.")
|
|
112
|
+
|
|
113
|
+
Dir.chdir(vendor_path) do
|
|
114
|
+
if system("git merge #{branch_name}")
|
|
115
|
+
ui.info("Cookbook #{name_args[0]} version #{download.version} successfully vendored!")
|
|
116
|
+
else
|
|
117
|
+
ui.error("You have merge conflicts - please resolve manually!")
|
|
118
|
+
ui.error("(Hint: cd #{vendor_path}; git status)")
|
|
119
|
+
exit 1
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
if config[:deps]
|
|
125
|
+
md = Chef::Cookbook::Metadata.new
|
|
126
|
+
md.from_file(File.join(cookbook_path, "metadata.rb"))
|
|
127
|
+
md.dependencies.each do |cookbook, version_list|
|
|
128
|
+
# Doesn't do versions.. yet
|
|
129
|
+
nv = Chef::Knife::CookbookSiteVendor.new
|
|
130
|
+
nv.config = config
|
|
131
|
+
nv.name_args = [ cookbook ]
|
|
132
|
+
nv.run
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|