mbailey-chef 0.9.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +201 -0
- data/README.rdoc +172 -0
- data/bin/chef-client +26 -0
- data/bin/chef-solo +25 -0
- data/bin/knife +26 -0
- data/bin/shef +34 -0
- data/distro/README +2 -0
- data/distro/common/man/man1/chef-indexer.1 +42 -0
- data/distro/common/man/man1/chef-server-webui.1 +106 -0
- data/distro/common/man/man1/chef-server.1 +107 -0
- data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
- data/distro/common/man/man1/chef-solr.1 +55 -0
- data/distro/common/man/man8/chef-client.8 +63 -0
- data/distro/common/man/man8/chef-solo.8 +57 -0
- data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
- data/distro/common/man/man8/knife.8 +1349 -0
- data/distro/common/man/man8/shef.8 +45 -0
- data/distro/common/markdown/README +3 -0
- data/distro/common/markdown/knife.mkd +832 -0
- data/distro/debian/etc/default/chef-client +4 -0
- data/distro/debian/etc/default/chef-server +9 -0
- data/distro/debian/etc/default/chef-server-webui +9 -0
- data/distro/debian/etc/default/chef-solr +7 -0
- data/distro/debian/etc/default/chef-solr-indexer +7 -0
- data/distro/debian/etc/init/chef-client.conf +17 -0
- data/distro/debian/etc/init/chef-server-webui.conf +17 -0
- data/distro/debian/etc/init/chef-server.conf +17 -0
- data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
- data/distro/debian/etc/init/chef-solr.conf +17 -0
- data/distro/debian/etc/init.d/chef-client +175 -0
- data/distro/debian/etc/init.d/chef-server +122 -0
- data/distro/debian/etc/init.d/chef-server-webui +123 -0
- data/distro/debian/etc/init.d/chef-solr +177 -0
- data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
- data/distro/redhat/etc/init.d/chef-client +106 -0
- data/distro/redhat/etc/init.d/chef-server +112 -0
- data/distro/redhat/etc/init.d/chef-server-webui +112 -0
- data/distro/redhat/etc/init.d/chef-solr +104 -0
- data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
- data/distro/redhat/etc/logrotate.d/chef-client +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
- data/distro/redhat/etc/sysconfig/chef-client +15 -0
- data/distro/redhat/etc/sysconfig/chef-server +14 -0
- data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
- data/distro/redhat/etc/sysconfig/chef-solr +8 -0
- data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
- data/lib/chef/api_client.rb +264 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +246 -0
- data/lib/chef/application/knife.rb +171 -0
- data/lib/chef/application/solo.rb +215 -0
- data/lib/chef/application.rb +127 -0
- data/lib/chef/applications.rb +4 -0
- data/lib/chef/certificate.rb +194 -0
- data/lib/chef/checksum.rb +182 -0
- data/lib/chef/checksum_cache.rb +173 -0
- data/lib/chef/client.rb +304 -0
- data/lib/chef/config.rb +240 -0
- data/lib/chef/cookbook/cookbook_collection.rb +44 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +54 -0
- data/lib/chef/cookbook/file_vendor.rb +48 -0
- data/lib/chef/cookbook/metadata/version.rb +87 -0
- data/lib/chef/cookbook/metadata.rb +500 -0
- data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
- data/lib/chef/cookbook/syntax_check.rb +136 -0
- data/lib/chef/cookbook_loader.rb +227 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
- data/lib/chef/cookbook_uploader.rb +103 -0
- data/lib/chef/cookbook_version.rb +930 -0
- data/lib/chef/couchdb.rb +239 -0
- data/lib/chef/daemon.rb +172 -0
- data/lib/chef/data_bag.rb +215 -0
- data/lib/chef/data_bag_item.rb +228 -0
- data/lib/chef/exceptions.rb +66 -0
- data/lib/chef/file_access_control.rb +140 -0
- data/lib/chef/file_cache.rb +218 -0
- data/lib/chef/handler/json_file.rb +58 -0
- data/lib/chef/handler.rb +206 -0
- data/lib/chef/index_queue/amqp_client.rb +113 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +76 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +44 -0
- data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
- data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +43 -0
- data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
- data/lib/chef/knife/bootstrap.rb +181 -0
- data/lib/chef/knife/client_bulk_delete.rb +40 -0
- data/lib/chef/knife/client_create.rb +70 -0
- data/lib/chef/knife/client_delete.rb +45 -0
- data/lib/chef/knife/client_edit.rb +45 -0
- data/lib/chef/knife/client_list.rb +40 -0
- data/lib/chef/knife/client_reregister.rb +56 -0
- data/lib/chef/knife/client_show.rb +50 -0
- data/lib/chef/knife/configure.rb +140 -0
- data/lib/chef/knife/configure_client.rb +52 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +58 -0
- data/lib/chef/knife/cookbook_create.rb +209 -0
- data/lib/chef/knife/cookbook_delete.rb +143 -0
- data/lib/chef/knife/cookbook_download.rb +130 -0
- data/lib/chef/knife/cookbook_list.rb +41 -0
- data/lib/chef/knife/cookbook_metadata.rb +82 -0
- data/lib/chef/knife/cookbook_metadata_from_file.rb +40 -0
- data/lib/chef/knife/cookbook_show.rb +98 -0
- data/lib/chef/knife/cookbook_site_download.rb +58 -0
- data/lib/chef/knife/cookbook_site_list.rb +56 -0
- data/lib/chef/knife/cookbook_site_search.rb +51 -0
- data/lib/chef/knife/cookbook_site_share.rb +109 -0
- data/lib/chef/knife/cookbook_site_show.rb +57 -0
- data/lib/chef/knife/cookbook_site_unshare.rb +52 -0
- data/lib/chef/knife/cookbook_site_vendor.rb +133 -0
- data/lib/chef/knife/cookbook_test.rb +82 -0
- data/lib/chef/knife/cookbook_upload.rb +95 -0
- data/lib/chef/knife/data_bag_create.rb +59 -0
- data/lib/chef/knife/data_bag_delete.rb +48 -0
- data/lib/chef/knife/data_bag_edit.rb +50 -0
- data/lib/chef/knife/data_bag_from_file.rb +44 -0
- data/lib/chef/knife/data_bag_list.rb +43 -0
- data/lib/chef/knife/data_bag_show.rb +41 -0
- data/lib/chef/knife/ec2_instance_data.rb +46 -0
- data/lib/chef/knife/ec2_server_create.rb +216 -0
- data/lib/chef/knife/ec2_server_delete.rb +90 -0
- data/lib/chef/knife/ec2_server_list.rb +88 -0
- data/lib/chef/knife/exec.rb +52 -0
- data/lib/chef/knife/index_rebuild.rb +51 -0
- data/lib/chef/knife/node_bulk_delete.rb +43 -0
- data/lib/chef/knife/node_create.rb +47 -0
- data/lib/chef/knife/node_delete.rb +44 -0
- data/lib/chef/knife/node_edit.rb +44 -0
- data/lib/chef/knife/node_from_file.rb +42 -0
- data/lib/chef/knife/node_list.rb +41 -0
- data/lib/chef/knife/node_run_list_add.rb +64 -0
- data/lib/chef/knife/node_run_list_remove.rb +45 -0
- data/lib/chef/knife/node_show.rb +54 -0
- data/lib/chef/knife/rackspace_server_create.rb +156 -0
- data/lib/chef/knife/rackspace_server_delete.rb +57 -0
- data/lib/chef/knife/rackspace_server_list.rb +59 -0
- data/lib/chef/knife/recipe_list.rb +32 -0
- data/lib/chef/knife/role_bulk_delete.rb +44 -0
- data/lib/chef/knife/role_create.rb +52 -0
- data/lib/chef/knife/role_delete.rb +44 -0
- data/lib/chef/knife/role_edit.rb +45 -0
- data/lib/chef/knife/role_from_file.rb +46 -0
- data/lib/chef/knife/role_list.rb +40 -0
- data/lib/chef/knife/role_show.rb +51 -0
- data/lib/chef/knife/search.rb +94 -0
- data/lib/chef/knife/slicehost_images_list.rb +53 -0
- data/lib/chef/knife/slicehost_server_create.rb +103 -0
- data/lib/chef/knife/slicehost_server_delete.rb +61 -0
- data/lib/chef/knife/slicehost_server_list.rb +64 -0
- data/lib/chef/knife/ssh.rb +328 -0
- data/lib/chef/knife/status.rb +87 -0
- data/lib/chef/knife/terremark_server_create.rb +152 -0
- data/lib/chef/knife/terremark_server_delete.rb +87 -0
- data/lib/chef/knife/terremark_server_list.rb +77 -0
- data/lib/chef/knife/windows_bootstrap.rb +154 -0
- data/lib/chef/knife.rb +522 -0
- data/lib/chef/log.rb +61 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command/unix.rb +215 -0
- data/lib/chef/mixin/command/windows.rb +72 -0
- data/lib/chef/mixin/command.rb +220 -0
- data/lib/chef/mixin/convert_to_class_name.rb +63 -0
- data/lib/chef/mixin/create_path.rb +56 -0
- data/lib/chef/mixin/deep_merge.rb +225 -0
- data/lib/chef/mixin/deprecation.rb +65 -0
- data/lib/chef/mixin/find_preferred_file.rb +92 -0
- data/lib/chef/mixin/from_file.rb +50 -0
- data/lib/chef/mixin/language.rb +156 -0
- data/lib/chef/mixin/language_include_attribute.rb +61 -0
- data/lib/chef/mixin/language_include_recipe.rb +52 -0
- data/lib/chef/mixin/params_validate.rb +225 -0
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
- data/lib/chef/mixin/shell_out.rb +38 -0
- data/lib/chef/mixin/template.rb +95 -0
- data/lib/chef/mixin/xml_escape.rb +140 -0
- data/lib/chef/mixins.rb +16 -0
- data/lib/chef/monkey_patches/dir.rb +36 -0
- data/lib/chef/monkey_patches/string.rb +28 -0
- data/lib/chef/monkey_patches/tempfile.rb +64 -0
- data/lib/chef/node/attribute.rb +465 -0
- data/lib/chef/node.rb +601 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +371 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +100 -0
- data/lib/chef/provider/cron/solaris.rb +195 -0
- data/lib/chef/provider/cron.rb +186 -0
- data/lib/chef/provider/deploy/revision.rb +73 -0
- data/lib/chef/provider/deploy/timestamped.rb +33 -0
- data/lib/chef/provider/deploy.rb +319 -0
- data/lib/chef/provider/directory.rb +72 -0
- data/lib/chef/provider/env/windows.rb +75 -0
- data/lib/chef/provider/env.rb +152 -0
- data/lib/chef/provider/erl_call.rb +72 -0
- data/lib/chef/provider/execute.rb +58 -0
- data/lib/chef/provider/file.rb +213 -0
- data/lib/chef/provider/git.rb +211 -0
- data/lib/chef/provider/group/dscl.rb +121 -0
- data/lib/chef/provider/group/gpasswd.rb +53 -0
- data/lib/chef/provider/group/groupadd.rb +78 -0
- data/lib/chef/provider/group/pw.rb +84 -0
- data/lib/chef/provider/group/usermod.rb +57 -0
- data/lib/chef/provider/group/windows.rb +79 -0
- data/lib/chef/provider/group.rb +133 -0
- data/lib/chef/provider/http_request.rb +122 -0
- data/lib/chef/provider/ifconfig.rb +132 -0
- data/lib/chef/provider/link.rb +161 -0
- data/lib/chef/provider/log.rb +54 -0
- data/lib/chef/provider/mdadm.rb +91 -0
- data/lib/chef/provider/mount/mount.rb +232 -0
- data/lib/chef/provider/mount/windows.rb +80 -0
- data/lib/chef/provider/mount.rb +117 -0
- data/lib/chef/provider/ohai.rb +41 -0
- data/lib/chef/provider/package/apt.rb +110 -0
- data/lib/chef/provider/package/dpkg.rb +112 -0
- data/lib/chef/provider/package/easy_install.rb +114 -0
- data/lib/chef/provider/package/freebsd.rb +123 -0
- data/lib/chef/provider/package/macports.rb +105 -0
- data/lib/chef/provider/package/pacman.rb +101 -0
- data/lib/chef/provider/package/portage.rb +124 -0
- data/lib/chef/provider/package/rpm.rb +101 -0
- data/lib/chef/provider/package/rubygems.rb +462 -0
- data/lib/chef/provider/package/solaris.rb +127 -0
- data/lib/chef/provider/package/yum-dump.py +128 -0
- data/lib/chef/provider/package/yum.rb +222 -0
- data/lib/chef/provider/package/zypper.rb +133 -0
- data/lib/chef/provider/package.rb +160 -0
- data/lib/chef/provider/remote_directory.rb +140 -0
- data/lib/chef/provider/remote_file.rb +120 -0
- data/lib/chef/provider/route.rb +195 -0
- data/lib/chef/provider/ruby_block.rb +33 -0
- data/lib/chef/provider/script.rb +55 -0
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/debian.rb +105 -0
- data/lib/chef/provider/service/freebsd.rb +156 -0
- data/lib/chef/provider/service/gentoo.rb +54 -0
- data/lib/chef/provider/service/init.rb +71 -0
- data/lib/chef/provider/service/redhat.rb +60 -0
- data/lib/chef/provider/service/simple.rb +118 -0
- data/lib/chef/provider/service/solaris.rb +85 -0
- data/lib/chef/provider/service/upstart.rb +192 -0
- data/lib/chef/provider/service/windows.rb +129 -0
- data/lib/chef/provider/service.rb +128 -0
- data/lib/chef/provider/subversion.rb +159 -0
- data/lib/chef/provider/template.rb +105 -0
- data/lib/chef/provider/user/dscl.rb +280 -0
- data/lib/chef/provider/user/pw.rb +113 -0
- data/lib/chef/provider/user/useradd.rb +137 -0
- data/lib/chef/provider/user/windows.rb +124 -0
- data/lib/chef/provider/user.rb +187 -0
- data/lib/chef/provider.rb +124 -0
- data/lib/chef/providers.rb +91 -0
- data/lib/chef/recipe.rb +130 -0
- data/lib/chef/resource/apt_package.rb +34 -0
- data/lib/chef/resource/bash.rb +33 -0
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/cookbook_file.rb +45 -0
- data/lib/chef/resource/cron.rb +188 -0
- data/lib/chef/resource/csh.rb +33 -0
- data/lib/chef/resource/deploy.rb +371 -0
- data/lib/chef/resource/deploy_revision.rb +35 -0
- data/lib/chef/resource/directory.rb +76 -0
- data/lib/chef/resource/dpkg_package.rb +34 -0
- data/lib/chef/resource/easy_install_package.rb +41 -0
- data/lib/chef/resource/env.rb +58 -0
- data/lib/chef/resource/erl_call.rb +83 -0
- data/lib/chef/resource/execute.rb +127 -0
- data/lib/chef/resource/file.rb +92 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/gem_package.rb +49 -0
- data/lib/chef/resource/git.rb +36 -0
- data/lib/chef/resource/group.rb +70 -0
- data/lib/chef/resource/http_request.rb +61 -0
- data/lib/chef/resource/ifconfig.rb +134 -0
- data/lib/chef/resource/link.rb +78 -0
- data/lib/chef/resource/log.rb +62 -0
- data/lib/chef/resource/macports_package.rb +29 -0
- data/lib/chef/resource/mdadm.rb +82 -0
- data/lib/chef/resource/mount.rb +135 -0
- data/lib/chef/resource/ohai.rb +40 -0
- data/lib/chef/resource/package.rb +80 -0
- data/lib/chef/resource/pacman_package.rb +33 -0
- data/lib/chef/resource/perl.rb +33 -0
- data/lib/chef/resource/portage_package.rb +33 -0
- data/lib/chef/resource/python.rb +33 -0
- data/lib/chef/resource/remote_directory.rb +109 -0
- data/lib/chef/resource/remote_file.rb +83 -0
- data/lib/chef/resource/route.rb +135 -0
- data/lib/chef/resource/rpm_package.rb +34 -0
- data/lib/chef/resource/ruby.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +40 -0
- data/lib/chef/resource/scm.rb +146 -0
- data/lib/chef/resource/script.rb +60 -0
- data/lib/chef/resource/service.rb +160 -0
- data/lib/chef/resource/solaris_package.rb +36 -0
- data/lib/chef/resource/subversion.rb +36 -0
- data/lib/chef/resource/template.rb +69 -0
- data/lib/chef/resource/timestamped_deploy.rb +31 -0
- data/lib/chef/resource/user.rb +130 -0
- data/lib/chef/resource/yum_package.rb +43 -0
- data/lib/chef/resource.rb +523 -0
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/resource_collection.rb +217 -0
- data/lib/chef/resource_definition.rb +67 -0
- data/lib/chef/resource_definition_list.rb +38 -0
- data/lib/chef/resources.rb +64 -0
- data/lib/chef/rest/auth_credentials.rb +78 -0
- data/lib/chef/rest/cookie_jar.rb +31 -0
- data/lib/chef/rest/rest_request.rb +188 -0
- data/lib/chef/rest.rb +394 -0
- data/lib/chef/role.rb +287 -0
- data/lib/chef/run_context.rb +110 -0
- data/lib/chef/run_list/run_list_expansion.rb +172 -0
- data/lib/chef/run_list/run_list_item.rb +78 -0
- data/lib/chef/run_list.rb +150 -0
- data/lib/chef/run_status.rb +121 -0
- data/lib/chef/runner.rb +107 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/search/query.rb +60 -0
- data/lib/chef/shef/ext.rb +568 -0
- data/lib/chef/shef/model_wrapper.rb +120 -0
- data/lib/chef/shef/shef_rest.rb +28 -0
- data/lib/chef/shef/shef_session.rb +271 -0
- data/lib/chef/shef.rb +325 -0
- data/lib/chef/shell_out.rb +413 -0
- data/lib/chef/streaming_cookbook_uploader.rb +201 -0
- data/lib/chef/tasks/chef_repo.rake +256 -0
- data/lib/chef/util/file_edit.rb +122 -0
- data/lib/chef/util/windows/net_group.rb +101 -0
- data/lib/chef/util/windows/net_use.rb +121 -0
- data/lib/chef/util/windows/net_user.rb +198 -0
- data/lib/chef/util/windows/volume.rb +59 -0
- data/lib/chef/util/windows.rb +56 -0
- data/lib/chef/version.rb +21 -0
- data/lib/chef/webui_user.rb +231 -0
- data/lib/chef.rb +39 -0
- metadata +533 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Author:: Daniel DeLeo (<dan@kallistec.com>)
|
|
2
|
+
# Copyright:: Copyright (c) 2009 Daniel DeLeo
|
|
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
|
+
class Chef
|
|
19
|
+
class ResourceCollection
|
|
20
|
+
class StepableIterator
|
|
21
|
+
|
|
22
|
+
def self.for_collection(new_collection)
|
|
23
|
+
instance = new(new_collection)
|
|
24
|
+
instance
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
attr_accessor :collection
|
|
28
|
+
attr_reader :position
|
|
29
|
+
|
|
30
|
+
def initialize(collection=[])
|
|
31
|
+
@position = 0
|
|
32
|
+
@paused = false
|
|
33
|
+
@collection = collection
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def size
|
|
37
|
+
collection.size
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def each(&block)
|
|
41
|
+
reset_iteration(block)
|
|
42
|
+
@iterator_type = :element
|
|
43
|
+
iterate
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def each_index(&block)
|
|
47
|
+
reset_iteration(block)
|
|
48
|
+
@iterator_type = :index
|
|
49
|
+
iterate
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def each_with_index(&block)
|
|
53
|
+
reset_iteration(block)
|
|
54
|
+
@iterator_type = :element_with_index
|
|
55
|
+
iterate
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def paused?
|
|
59
|
+
@paused
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def pause
|
|
63
|
+
@paused = true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def resume
|
|
67
|
+
@paused = false
|
|
68
|
+
iterate
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def rewind
|
|
72
|
+
@position = 0
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def skip_back(skips=1)
|
|
76
|
+
@position -= skips
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def skip_forward(skips=1)
|
|
80
|
+
@position += skips
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def step
|
|
84
|
+
return nil if @position == size
|
|
85
|
+
call_iterator_block
|
|
86
|
+
@position += 1
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def iterate_on(iteration_type, &block)
|
|
90
|
+
@iterator_type = iteration_type
|
|
91
|
+
@iterator_block = block
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
private
|
|
95
|
+
|
|
96
|
+
def reset_iteration(iterator_block)
|
|
97
|
+
@iterator_block = iterator_block
|
|
98
|
+
@position = 0
|
|
99
|
+
@paused = false
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def iterate
|
|
103
|
+
while @position < size && !paused?
|
|
104
|
+
step
|
|
105
|
+
end
|
|
106
|
+
collection
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def call_iterator_block
|
|
110
|
+
case @iterator_type
|
|
111
|
+
when :element
|
|
112
|
+
@iterator_block.call(collection[@position])
|
|
113
|
+
when :index
|
|
114
|
+
@iterator_block.call(@position)
|
|
115
|
+
when :element_with_index
|
|
116
|
+
@iterator_block.call(collection[@position], @position)
|
|
117
|
+
else
|
|
118
|
+
raise "42error: someone forgot to set @iterator_type, wtf?"
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Christopher Walters (<cw@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 2008, 2009 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/resource'
|
|
21
|
+
require 'chef/resource_collection/stepable_iterator'
|
|
22
|
+
|
|
23
|
+
class Chef
|
|
24
|
+
class ResourceCollection
|
|
25
|
+
include Enumerable
|
|
26
|
+
|
|
27
|
+
attr_reader :iterator
|
|
28
|
+
|
|
29
|
+
def initialize
|
|
30
|
+
@resources = Array.new
|
|
31
|
+
@resources_by_name = Hash.new
|
|
32
|
+
@insert_after_idx = nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def all_resources
|
|
36
|
+
@resources
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def [](index)
|
|
40
|
+
@resources[index]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def []=(index, arg)
|
|
44
|
+
is_chef_resource(arg)
|
|
45
|
+
@resources[index] = arg
|
|
46
|
+
@resources_by_name[arg.to_s] = index
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def <<(*args)
|
|
50
|
+
args.flatten.each do |a|
|
|
51
|
+
is_chef_resource(a)
|
|
52
|
+
@resources << a
|
|
53
|
+
@resources_by_name[a.to_s] = @resources.length - 1
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def insert(resource)
|
|
58
|
+
is_chef_resource(resource)
|
|
59
|
+
if @insert_after_idx
|
|
60
|
+
# in the middle of executing a run, so any resources inserted now should
|
|
61
|
+
# be placed after the most recent addition done by the currently executing
|
|
62
|
+
# resource
|
|
63
|
+
@resources.insert(@insert_after_idx + 1, resource)
|
|
64
|
+
# update name -> location mappings and register new resource
|
|
65
|
+
@resources_by_name.each_key do |key|
|
|
66
|
+
@resources_by_name[key] += 1 if @resources_by_name[key] > @insert_after_idx
|
|
67
|
+
end
|
|
68
|
+
@resources_by_name[resource.to_s] = @insert_after_idx + 1
|
|
69
|
+
@insert_after_idx += 1
|
|
70
|
+
else
|
|
71
|
+
@resources << resource
|
|
72
|
+
@resources_by_name[resource.to_s] = @resources.length - 1
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def push(*args)
|
|
77
|
+
args.flatten.each do |arg|
|
|
78
|
+
is_chef_resource(arg)
|
|
79
|
+
@resources.push(arg)
|
|
80
|
+
@resources_by_name[arg.to_s] = @resources.length - 1
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def each
|
|
85
|
+
@resources.each do |resource|
|
|
86
|
+
yield resource
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def execute_each_resource(&resource_exec_block)
|
|
91
|
+
@iterator = StepableIterator.for_collection(@resources)
|
|
92
|
+
@iterator.each_with_index do |resource, idx|
|
|
93
|
+
@insert_after_idx = idx
|
|
94
|
+
yield resource
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def each_index
|
|
99
|
+
@resources.each_index do |i|
|
|
100
|
+
yield i
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def lookup(resource)
|
|
105
|
+
lookup_by = nil
|
|
106
|
+
if resource.kind_of?(Chef::Resource)
|
|
107
|
+
lookup_by = resource.to_s
|
|
108
|
+
elsif resource.kind_of?(String)
|
|
109
|
+
lookup_by = resource
|
|
110
|
+
else
|
|
111
|
+
raise ArgumentError, "Must pass a Chef::Resource or String to lookup"
|
|
112
|
+
end
|
|
113
|
+
res = @resources_by_name[lookup_by]
|
|
114
|
+
unless res
|
|
115
|
+
raise Chef::Exceptions::ResourceNotFound, "Cannot find a resource matching #{lookup_by} (did you define it first?)"
|
|
116
|
+
end
|
|
117
|
+
@resources[res]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Find existing resources by searching the list of existing resources. Possible
|
|
121
|
+
# forms are:
|
|
122
|
+
#
|
|
123
|
+
# find(:file => "foobar")
|
|
124
|
+
# find(:file => [ "foobar", "baz" ])
|
|
125
|
+
# find("file[foobar]", "file[baz]")
|
|
126
|
+
# find("file[foobar,baz]")
|
|
127
|
+
#
|
|
128
|
+
# Returns the matching resource, or an Array of matching resources.
|
|
129
|
+
#
|
|
130
|
+
# Raises an ArgumentError if you feed it bad lookup information
|
|
131
|
+
# Raises a Runtime Error if it can't find the resources you are looking for.
|
|
132
|
+
def find(*args)
|
|
133
|
+
results = Array.new
|
|
134
|
+
args.each do |arg|
|
|
135
|
+
case arg
|
|
136
|
+
when Hash
|
|
137
|
+
results << find_resource_by_hash(arg)
|
|
138
|
+
when String
|
|
139
|
+
results << find_resource_by_string(arg)
|
|
140
|
+
else
|
|
141
|
+
msg = "arguments to #{self.class.name}#find should be of the form :resource => 'name' or resource[name]"
|
|
142
|
+
raise Chef::Exceptions::InvalidResourceSpecification, msg
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
flat_results = results.flatten
|
|
146
|
+
flat_results.length == 1 ? flat_results[0] : flat_results
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# resources is a poorly named, but we have to maintain it for back
|
|
150
|
+
# compat.
|
|
151
|
+
alias_method :resources, :find
|
|
152
|
+
|
|
153
|
+
# Serialize this object as a hash
|
|
154
|
+
def to_json(*a)
|
|
155
|
+
instance_vars = Hash.new
|
|
156
|
+
self.instance_variables.each do |iv|
|
|
157
|
+
instance_vars[iv] = self.instance_variable_get(iv)
|
|
158
|
+
end
|
|
159
|
+
results = {
|
|
160
|
+
'json_class' => self.class.name,
|
|
161
|
+
'instance_vars' => instance_vars
|
|
162
|
+
}
|
|
163
|
+
results.to_json(*a)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def self.json_create(o)
|
|
167
|
+
collection = self.new()
|
|
168
|
+
o["instance_vars"].each do |k,v|
|
|
169
|
+
collection.instance_variable_set(k.to_sym, v)
|
|
170
|
+
end
|
|
171
|
+
collection
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
private
|
|
175
|
+
|
|
176
|
+
def find_resource_by_hash(arg)
|
|
177
|
+
results = Array.new
|
|
178
|
+
arg.each do |resource_name, name_list|
|
|
179
|
+
names = name_list.kind_of?(Array) ? name_list : [ name_list ]
|
|
180
|
+
names.each do |name|
|
|
181
|
+
res_name = "#{resource_name.to_s}[#{name}]"
|
|
182
|
+
results << lookup(res_name)
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
return results
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def find_resource_by_string(arg)
|
|
189
|
+
results = Array.new
|
|
190
|
+
case arg
|
|
191
|
+
when /^(.+)\[(.+?),(.+)\]$/
|
|
192
|
+
resource_type = $1
|
|
193
|
+
arg =~ /^.+\[(.+)\]$/
|
|
194
|
+
resource_list = $1
|
|
195
|
+
resource_list.split(",").each do |name|
|
|
196
|
+
resource_name = "#{resource_type}[#{name}]"
|
|
197
|
+
results << lookup(resource_name)
|
|
198
|
+
end
|
|
199
|
+
when /^(.+)\[(.+)\]$/
|
|
200
|
+
resource_type = $1
|
|
201
|
+
name = $2
|
|
202
|
+
resource_name = "#{resource_type}[#{name}]"
|
|
203
|
+
results << lookup(resource_name)
|
|
204
|
+
else
|
|
205
|
+
raise ArgumentError, "You must have a string like resource_type[name]!"
|
|
206
|
+
end
|
|
207
|
+
return results
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def is_chef_resource(arg)
|
|
211
|
+
unless arg.kind_of?(Chef::Resource)
|
|
212
|
+
raise ArgumentError, "Members must be Chef::Resource's"
|
|
213
|
+
end
|
|
214
|
+
true
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/mixin/from_file'
|
|
20
|
+
require 'chef/mixin/params_validate'
|
|
21
|
+
|
|
22
|
+
class Chef
|
|
23
|
+
class ResourceDefinition
|
|
24
|
+
|
|
25
|
+
include Chef::Mixin::FromFile
|
|
26
|
+
include Chef::Mixin::ParamsValidate
|
|
27
|
+
|
|
28
|
+
attr_accessor :name, :params, :recipe, :node
|
|
29
|
+
|
|
30
|
+
def initialize(node=nil)
|
|
31
|
+
@name = nil
|
|
32
|
+
@params = Hash.new
|
|
33
|
+
@recipe = nil
|
|
34
|
+
@node = node
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def define(resource_name, prototype_params=nil, &block)
|
|
38
|
+
unless resource_name.kind_of?(Symbol)
|
|
39
|
+
raise ArgumentError, "You must use a symbol when defining a new resource!"
|
|
40
|
+
end
|
|
41
|
+
@name = resource_name
|
|
42
|
+
if prototype_params
|
|
43
|
+
unless prototype_params.kind_of?(Hash)
|
|
44
|
+
raise ArgumentError, "You must pass a hash as the prototype parameters for a definition."
|
|
45
|
+
end
|
|
46
|
+
@params = prototype_params
|
|
47
|
+
end
|
|
48
|
+
if Kernel.block_given?
|
|
49
|
+
@recipe = block
|
|
50
|
+
else
|
|
51
|
+
raise ArgumentError, "You must pass a block to a definition."
|
|
52
|
+
end
|
|
53
|
+
true
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# When we do the resource definition, we're really just setting new values for
|
|
57
|
+
# the paramaters we prototyped at the top. This method missing is as simple as
|
|
58
|
+
# it gets.
|
|
59
|
+
def method_missing(symbol, *args)
|
|
60
|
+
@params[symbol] = args.length == 1 ? args[0] : args
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def to_s
|
|
64
|
+
"#{name.to_s}"
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/mixin/from_file'
|
|
20
|
+
require 'chef/resource_definition'
|
|
21
|
+
|
|
22
|
+
class Chef
|
|
23
|
+
class ResourceDefinitionList
|
|
24
|
+
include Chef::Mixin::FromFile
|
|
25
|
+
|
|
26
|
+
attr_accessor :defines
|
|
27
|
+
|
|
28
|
+
def initialize
|
|
29
|
+
@defines = Hash.new
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def define(resource_name, prototype_params=nil, &block)
|
|
33
|
+
@defines[resource_name] = ResourceDefinition.new
|
|
34
|
+
@defines[resource_name].define(resource_name, prototype_params, &block)
|
|
35
|
+
true
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|