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,15 @@
|
|
|
1
|
+
# Configuration file for the chef-client service
|
|
2
|
+
|
|
3
|
+
#CONFIG=/etc/chef/client.rb
|
|
4
|
+
#PIDFILE=/var/run/chef/client.pid
|
|
5
|
+
#LOCKFILE=/var/lock/subsys/chef-client
|
|
6
|
+
#LOGFILE=/var/log/chef/client.log
|
|
7
|
+
# Sleep interval between runs.
|
|
8
|
+
# This value is in seconds.
|
|
9
|
+
#INTERVAL=1800
|
|
10
|
+
# Maximum amount of random delay before starting a run. Prevents every client
|
|
11
|
+
# from contacting the server at the exact same time.
|
|
12
|
+
# This value is in seconds.
|
|
13
|
+
#SPLAY=20
|
|
14
|
+
# Any additional chef-client options.
|
|
15
|
+
#OPTIONS=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Configuration file for the chef-server service
|
|
2
|
+
|
|
3
|
+
#CONFIG=/etc/chef/server.rb
|
|
4
|
+
#PIDFILE=/var/run/chef/server.pid
|
|
5
|
+
#LOCKFILE=/var/lock/subsys/chef-server
|
|
6
|
+
#LOGFILE=/var/log/chef/server.log
|
|
7
|
+
#PORT=4000
|
|
8
|
+
#ENVIRONMENT=production
|
|
9
|
+
#ADAPTER=thin
|
|
10
|
+
#CHILDPIDFILES=/var/run/chef/server.%s.pid
|
|
11
|
+
#SERVER_USER=chef
|
|
12
|
+
#SERVER_GROUP=chef
|
|
13
|
+
# Any additional chef-server options.
|
|
14
|
+
#OPTIONS=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Configuration file for the chef-server-webui service
|
|
2
|
+
|
|
3
|
+
#CONFIG=/etc/chef/webui.rb
|
|
4
|
+
#PIDFILE=/var/run/chef/server-webui.pid
|
|
5
|
+
#LOCKFILE=/var/lock/subsys/chef-server-webui
|
|
6
|
+
#LOGFILE=/var/log/chef/server-webui.log
|
|
7
|
+
#PORT=4040
|
|
8
|
+
#ENVIRONMENT=production
|
|
9
|
+
#ADAPTER=thin
|
|
10
|
+
#CHILDPIDFILES=/var/run/chef/server-webui.%s.pid
|
|
11
|
+
#SERVER_USER=chef
|
|
12
|
+
#SERVER_GROUP=chef
|
|
13
|
+
# Any additional chef-server-webui options.
|
|
14
|
+
#OPTIONS=
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Nuo Yan (<nuo@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 2008 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/config'
|
|
21
|
+
require 'chef/mixin/params_validate'
|
|
22
|
+
require 'chef/mixin/from_file'
|
|
23
|
+
require 'chef/couchdb'
|
|
24
|
+
require 'chef/certificate'
|
|
25
|
+
require 'chef/index_queue'
|
|
26
|
+
require 'extlib'
|
|
27
|
+
require 'json'
|
|
28
|
+
|
|
29
|
+
class Chef
|
|
30
|
+
class ApiClient
|
|
31
|
+
|
|
32
|
+
include Chef::Mixin::FromFile
|
|
33
|
+
include Chef::Mixin::ParamsValidate
|
|
34
|
+
include Chef::IndexQueue::Indexable
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
DESIGN_DOCUMENT = {
|
|
38
|
+
"version" => 1,
|
|
39
|
+
"language" => "javascript",
|
|
40
|
+
"views" => {
|
|
41
|
+
"all" => {
|
|
42
|
+
"map" => <<-EOJS
|
|
43
|
+
function(doc) {
|
|
44
|
+
if (doc.chef_type == "client") {
|
|
45
|
+
emit(doc.name, doc);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
EOJS
|
|
49
|
+
},
|
|
50
|
+
"all_id" => {
|
|
51
|
+
"map" => <<-EOJS
|
|
52
|
+
function(doc) {
|
|
53
|
+
if (doc.chef_type == "client") {
|
|
54
|
+
emit(doc.name, doc.name);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
EOJS
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
attr_accessor :couchdb_rev, :couchdb_id, :couchdb
|
|
63
|
+
|
|
64
|
+
# Create a new Chef::ApiClient object.
|
|
65
|
+
def initialize(couchdb=nil)
|
|
66
|
+
@name = ''
|
|
67
|
+
@public_key = nil
|
|
68
|
+
@private_key = nil
|
|
69
|
+
@couchdb_rev = nil
|
|
70
|
+
@couchdb_id = nil
|
|
71
|
+
@admin = false
|
|
72
|
+
@couchdb = (couchdb || Chef::CouchDB.new)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Gets or sets the client name.
|
|
76
|
+
#
|
|
77
|
+
# @params [Optional String] The name must be alpha-numeric plus - and _.
|
|
78
|
+
# @return [String] The current value of the name.
|
|
79
|
+
def name(arg=nil)
|
|
80
|
+
set_or_return(
|
|
81
|
+
:name,
|
|
82
|
+
arg,
|
|
83
|
+
:regex => /^[\-[:alnum:]_\.]+$/
|
|
84
|
+
)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Gets or sets whether this client is an admin.
|
|
88
|
+
#
|
|
89
|
+
# @params [Optional True/False] Should be true or false - default is false.
|
|
90
|
+
# @return [True/False] The current value
|
|
91
|
+
def admin(arg=nil)
|
|
92
|
+
set_or_return(
|
|
93
|
+
:admin,
|
|
94
|
+
arg,
|
|
95
|
+
:kind_of => [ TrueClass, FalseClass ]
|
|
96
|
+
)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Gets or sets the public key.
|
|
100
|
+
#
|
|
101
|
+
# @params [Optional String] The string representation of the public key.
|
|
102
|
+
# @return [String] The current value.
|
|
103
|
+
def public_key(arg=nil)
|
|
104
|
+
set_or_return(
|
|
105
|
+
:public_key,
|
|
106
|
+
arg,
|
|
107
|
+
:kind_of => String
|
|
108
|
+
)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Gets or sets the private key.
|
|
112
|
+
#
|
|
113
|
+
# @params [Optional String] The string representation of the private key.
|
|
114
|
+
# @return [String] The current value.
|
|
115
|
+
def private_key(arg=nil)
|
|
116
|
+
set_or_return(
|
|
117
|
+
:private_key,
|
|
118
|
+
arg,
|
|
119
|
+
:kind_of => String
|
|
120
|
+
)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Creates a new public/private key pair, and populates the public_key and
|
|
124
|
+
# private_key attributes.
|
|
125
|
+
#
|
|
126
|
+
# @return [True]
|
|
127
|
+
def create_keys
|
|
128
|
+
results = Chef::Certificate.gen_keypair(self.name)
|
|
129
|
+
self.public_key(results[0].to_s)
|
|
130
|
+
self.private_key(results[1].to_s)
|
|
131
|
+
true
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# The hash representation of the object. Includes the name and public_key,
|
|
135
|
+
# but never the private key.
|
|
136
|
+
#
|
|
137
|
+
# @return [Hash]
|
|
138
|
+
def to_hash
|
|
139
|
+
result = {
|
|
140
|
+
"name" => @name,
|
|
141
|
+
"public_key" => @public_key,
|
|
142
|
+
"admin" => @admin,
|
|
143
|
+
'json_class' => self.class.name,
|
|
144
|
+
"chef_type" => "client"
|
|
145
|
+
}
|
|
146
|
+
result["_rev"] = @couchdb_rev if @couchdb_rev
|
|
147
|
+
result
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# The JSON representation of the object.
|
|
151
|
+
#
|
|
152
|
+
# @return [String] the JSON string.
|
|
153
|
+
def to_json(*a)
|
|
154
|
+
to_hash.to_json(*a)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def self.json_create(o)
|
|
158
|
+
client = Chef::ApiClient.new
|
|
159
|
+
client.name(o["name"] || o["clientname"])
|
|
160
|
+
client.public_key(o["public_key"])
|
|
161
|
+
client.admin(o["admin"])
|
|
162
|
+
client.couchdb_rev = o["_rev"]
|
|
163
|
+
client.couchdb_id = o["_id"]
|
|
164
|
+
client.index_id = client.couchdb_id
|
|
165
|
+
client
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# List all the Chef::ApiClient objects in the CouchDB. If inflate is set
|
|
169
|
+
# to true, you will get the full list of all ApiClients, fully inflated.
|
|
170
|
+
def self.cdb_list(inflate=false, couchdb=nil)
|
|
171
|
+
rs = (couchdb || Chef::CouchDB.new).list("clients", inflate)
|
|
172
|
+
lookup = (inflate ? "value" : "key")
|
|
173
|
+
rs["rows"].collect { |r| r[lookup] }
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def self.list(inflate=false)
|
|
177
|
+
if inflate
|
|
178
|
+
response = Hash.new
|
|
179
|
+
Chef::Search::Query.new.search(:client) do |n|
|
|
180
|
+
n = self.json_create(n) if n.instance_of?(Hash)
|
|
181
|
+
response[n.name] = n
|
|
182
|
+
end
|
|
183
|
+
response
|
|
184
|
+
else
|
|
185
|
+
Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("clients")
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Load a client by name from CouchDB
|
|
190
|
+
#
|
|
191
|
+
# @params [String] The name of the client to load
|
|
192
|
+
# @return [Chef::ApiClient] The resulting Chef::ApiClient object
|
|
193
|
+
def self.cdb_load(name, couchdb=nil)
|
|
194
|
+
(couchdb || Chef::CouchDB.new).load("client", name)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# Load a client by name via the API
|
|
198
|
+
def self.load(name)
|
|
199
|
+
response = Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("clients/#{name}")
|
|
200
|
+
if response.kind_of?(Chef::ApiClient)
|
|
201
|
+
response
|
|
202
|
+
else
|
|
203
|
+
client = Chef::ApiClient.new
|
|
204
|
+
client.name(response['clientname'])
|
|
205
|
+
client
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# Remove this client from the CouchDB
|
|
210
|
+
#
|
|
211
|
+
# @params [String] The name of the client to delete
|
|
212
|
+
# @return [Chef::ApiClient] The last version of the object
|
|
213
|
+
def cdb_destroy
|
|
214
|
+
@couchdb.delete("client", @name, @couchdb_rev)
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Remove this client via the REST API
|
|
218
|
+
def destroy
|
|
219
|
+
Chef::REST.new(Chef::Config[:chef_server_url]).delete_rest("clients/#{@name}")
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# Save this client to the CouchDB
|
|
223
|
+
def cdb_save
|
|
224
|
+
@couchdb_rev = @couchdb.store("client", @name, self)["rev"]
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# Save this client via the REST API, returns a hash including the private key
|
|
228
|
+
def save(new_key=false, validation=false)
|
|
229
|
+
if validation
|
|
230
|
+
r = Chef::REST.new(Chef::Config[:chef_server_url], Chef::Config[:validation_client_name], Chef::Config[:validation_key])
|
|
231
|
+
else
|
|
232
|
+
r = Chef::REST.new(Chef::Config[:chef_server_url])
|
|
233
|
+
end
|
|
234
|
+
# First, try and create a new registration
|
|
235
|
+
begin
|
|
236
|
+
r.post_rest("clients", {:name => self.name, :admin => self.admin })
|
|
237
|
+
rescue Net::HTTPServerException => e
|
|
238
|
+
# If that fails, go ahead and try and update it
|
|
239
|
+
if e.response.code == "409"
|
|
240
|
+
r.put_rest("clients/#{name}", { :name => self.name, :admin => self.admin, :private_key => new_key })
|
|
241
|
+
else
|
|
242
|
+
raise e
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
# Create the client via the REST API
|
|
248
|
+
def create
|
|
249
|
+
Chef::REST.new(Chef::Config[:chef_server_url]).post_rest("clients", self)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# Set up our CouchDB design document
|
|
253
|
+
def self.create_design_document(couchdb=nil)
|
|
254
|
+
(couchdb ||= Chef::CouchDB.new).create_design_document("clients", DESIGN_DOCUMENT)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
# As a string
|
|
258
|
+
def to_s
|
|
259
|
+
"client[#{@name}]"
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: AJ Christensen (<aj@opscode.comz>)
|
|
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
|
+
require 'chef/application'
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: AJ Christensen (<aj@opscode.com)
|
|
3
|
+
# Author:: Christopher Brown (<cb@opscode.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
|
5
|
+
# License:: Apache License, Version 2.0
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
|
|
19
|
+
require 'chef/application'
|
|
20
|
+
require 'chef/client'
|
|
21
|
+
require 'chef/config'
|
|
22
|
+
require 'chef/daemon'
|
|
23
|
+
require 'chef/log'
|
|
24
|
+
require 'chef/rest'
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class Chef::Application::Client < Chef::Application
|
|
28
|
+
|
|
29
|
+
option :config_file,
|
|
30
|
+
:short => "-c CONFIG",
|
|
31
|
+
:long => "--config CONFIG",
|
|
32
|
+
:default => "/etc/chef/client.rb",
|
|
33
|
+
:description => "The configuration file to use"
|
|
34
|
+
|
|
35
|
+
option :log_level,
|
|
36
|
+
:short => "-l LEVEL",
|
|
37
|
+
:long => "--log_level LEVEL",
|
|
38
|
+
:description => "Set the log level (debug, info, warn, error, fatal)",
|
|
39
|
+
:proc => lambda { |l| l.to_sym }
|
|
40
|
+
|
|
41
|
+
option :log_location,
|
|
42
|
+
:short => "-L LOGLOCATION",
|
|
43
|
+
:long => "--logfile LOGLOCATION",
|
|
44
|
+
:description => "Set the log file location, defaults to STDOUT - recommended for daemonizing",
|
|
45
|
+
:proc => nil
|
|
46
|
+
|
|
47
|
+
option :verbose_logging,
|
|
48
|
+
:short => "-V",
|
|
49
|
+
:long => "--verbose",
|
|
50
|
+
:description => "Ensures logging goes to STDOUT as well as to other configured log location(s).",
|
|
51
|
+
:proc => lambda { |p| true }
|
|
52
|
+
|
|
53
|
+
option :help,
|
|
54
|
+
:short => "-h",
|
|
55
|
+
:long => "--help",
|
|
56
|
+
:description => "Show this message",
|
|
57
|
+
:on => :tail,
|
|
58
|
+
:boolean => true,
|
|
59
|
+
:show_options => true,
|
|
60
|
+
:exit => 0
|
|
61
|
+
|
|
62
|
+
option :user,
|
|
63
|
+
:short => "-u USER",
|
|
64
|
+
:long => "--user USER",
|
|
65
|
+
:description => "User to set privilege to",
|
|
66
|
+
:proc => nil
|
|
67
|
+
|
|
68
|
+
option :group,
|
|
69
|
+
:short => "-g GROUP",
|
|
70
|
+
:long => "--group GROUP",
|
|
71
|
+
:description => "Group to set privilege to",
|
|
72
|
+
:proc => nil
|
|
73
|
+
|
|
74
|
+
option :daemonize,
|
|
75
|
+
:short => "-d",
|
|
76
|
+
:long => "--daemonize",
|
|
77
|
+
:description => "Daemonize the process",
|
|
78
|
+
:proc => lambda { |p| true }
|
|
79
|
+
|
|
80
|
+
option :pid_file,
|
|
81
|
+
:short => "-P PID_FILE",
|
|
82
|
+
:long => "--pid PIDFILE",
|
|
83
|
+
:description => "Set the PID file location, defaults to /tmp/chef-client.pid",
|
|
84
|
+
:proc => nil
|
|
85
|
+
|
|
86
|
+
option :interval,
|
|
87
|
+
:short => "-i SECONDS",
|
|
88
|
+
:long => "--interval SECONDS",
|
|
89
|
+
:description => "Run chef-client periodically, in seconds",
|
|
90
|
+
:proc => lambda { |s| s.to_i }
|
|
91
|
+
|
|
92
|
+
option :once,
|
|
93
|
+
:long => "--short",
|
|
94
|
+
:description => "Cancel any interval or splay options, run chef once and exit",
|
|
95
|
+
:boolean => true
|
|
96
|
+
|
|
97
|
+
option :json_attribs,
|
|
98
|
+
:short => "-j JSON_ATTRIBS",
|
|
99
|
+
:long => "--json-attributes JSON_ATTRIBS",
|
|
100
|
+
:description => "Load attributes from a JSON file or URL",
|
|
101
|
+
:proc => nil
|
|
102
|
+
|
|
103
|
+
option :node_name,
|
|
104
|
+
:short => "-N NODE_NAME",
|
|
105
|
+
:long => "--node-name NODE_NAME",
|
|
106
|
+
:description => "The node name for this client",
|
|
107
|
+
:proc => nil
|
|
108
|
+
|
|
109
|
+
option :splay,
|
|
110
|
+
:short => "-s SECONDS",
|
|
111
|
+
:long => "--splay SECONDS",
|
|
112
|
+
:description => "The splay time for running at intervals, in seconds",
|
|
113
|
+
:proc => lambda { |s| s.to_i }
|
|
114
|
+
|
|
115
|
+
option :chef_server_url,
|
|
116
|
+
:short => "-S CHEFSERVERURL",
|
|
117
|
+
:long => "--server CHEFSERVERURL",
|
|
118
|
+
:description => "The chef server URL",
|
|
119
|
+
:proc => nil
|
|
120
|
+
|
|
121
|
+
option :validation_key,
|
|
122
|
+
:short => "-K KEY_FILE",
|
|
123
|
+
:long => "--validation_key KEY_FILE",
|
|
124
|
+
:description => "Set the validation key file location, used for registering new clients",
|
|
125
|
+
:proc => nil
|
|
126
|
+
|
|
127
|
+
option :client_key,
|
|
128
|
+
:short => "-k KEY_FILE",
|
|
129
|
+
:long => "--client_key KEY_FILE",
|
|
130
|
+
:description => "Set the client key file location",
|
|
131
|
+
:proc => nil
|
|
132
|
+
|
|
133
|
+
option :version,
|
|
134
|
+
:short => "-v",
|
|
135
|
+
:long => "--version",
|
|
136
|
+
:description => "Show chef version",
|
|
137
|
+
:boolean => true,
|
|
138
|
+
:proc => lambda {|v| puts "Chef: #{::Chef::VERSION}"},
|
|
139
|
+
:exit => 0
|
|
140
|
+
|
|
141
|
+
def initialize
|
|
142
|
+
super
|
|
143
|
+
|
|
144
|
+
@chef_client = nil
|
|
145
|
+
@chef_client_json = nil
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Reconfigure the chef client
|
|
149
|
+
# Re-open the JSON attributes and load them into the node
|
|
150
|
+
def reconfigure
|
|
151
|
+
super
|
|
152
|
+
|
|
153
|
+
Chef::Config[:chef_server_url] = config[:chef_server_url] if config.has_key? :chef_server_url
|
|
154
|
+
|
|
155
|
+
if Chef::Config[:daemonize]
|
|
156
|
+
Chef::Config[:interval] ||= 1800
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
if Chef::Config[:once]
|
|
160
|
+
Chef::Config[:interval] = nil
|
|
161
|
+
Chef::Config[:splay] = nil
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
if Chef::Config[:json_attribs]
|
|
165
|
+
begin
|
|
166
|
+
json_io = case Chef::Config[:json_attribs]
|
|
167
|
+
when /^(http|https):\/\//
|
|
168
|
+
@rest = Chef::REST.new(Chef::Config[:json_attribs], nil, nil)
|
|
169
|
+
@rest.get_rest(Chef::Config[:json_attribs], true).open
|
|
170
|
+
else
|
|
171
|
+
open(Chef::Config[:json_attribs])
|
|
172
|
+
end
|
|
173
|
+
rescue SocketError => error
|
|
174
|
+
Chef::Application.fatal!("I cannot connect to #{Chef::Config[:json_attribs]}", 2)
|
|
175
|
+
rescue Errno::ENOENT => error
|
|
176
|
+
Chef::Application.fatal!("I cannot find #{Chef::Config[:json_attribs]}", 2)
|
|
177
|
+
rescue Errno::EACCES => error
|
|
178
|
+
Chef::Application.fatal!("Permissions are incorrect on #{Chef::Config[:json_attribs]}. Please chmod a+r #{Chef::Config[:json_attribs]}", 2)
|
|
179
|
+
rescue Exception => error
|
|
180
|
+
Chef::Application.fatal!("Got an unexpected error reading #{Chef::Config[:json_attribs]}: #{error.message}", 2)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
begin
|
|
184
|
+
@chef_client_json = JSON.parse(json_io.read)
|
|
185
|
+
json_io.close unless json_io.closed?
|
|
186
|
+
rescue JSON::ParserError => error
|
|
187
|
+
Chef::Application.fatal!("Could not parse the provided JSON file (#{Chef::Config[:json_attribs]})!: " + error.message, 2)
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def configure_logging
|
|
193
|
+
super
|
|
194
|
+
Chef::Log.verbose = Chef::Config[:verbose_logging]
|
|
195
|
+
Mixlib::Authentication::Log.logger = Ohai::Log.logger = Chef::Log.logger
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def setup_application
|
|
199
|
+
Chef::Daemon.change_privilege
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# Run the chef client, optionally daemonizing or looping at intervals.
|
|
203
|
+
def run_application
|
|
204
|
+
if Chef::Config[:version]
|
|
205
|
+
puts "Chef version: #{::Chef::VERSION}"
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
if Chef::Config[:daemonize]
|
|
209
|
+
Chef::Daemon.daemonize("chef-client")
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
loop do
|
|
213
|
+
begin
|
|
214
|
+
if Chef::Config[:splay]
|
|
215
|
+
splay = rand Chef::Config[:splay]
|
|
216
|
+
Chef::Log.debug("Splay sleep #{splay} seconds")
|
|
217
|
+
sleep splay
|
|
218
|
+
end
|
|
219
|
+
@chef_client = Chef::Client.new(@chef_client_json)
|
|
220
|
+
@chef_client_json = nil
|
|
221
|
+
|
|
222
|
+
@chef_client.run
|
|
223
|
+
@chef_client = nil
|
|
224
|
+
if Chef::Config[:interval]
|
|
225
|
+
Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds")
|
|
226
|
+
sleep Chef::Config[:interval]
|
|
227
|
+
else
|
|
228
|
+
Chef::Application.exit! "Exiting", 0
|
|
229
|
+
end
|
|
230
|
+
rescue SystemExit => e
|
|
231
|
+
raise
|
|
232
|
+
rescue Exception => e
|
|
233
|
+
if Chef::Config[:interval]
|
|
234
|
+
Chef::Log.error("#{e.class}:#{e}\n#{e.backtrace.join("\n")}")
|
|
235
|
+
Chef::Log.error("Sleeping for #{Chef::Config[:interval]} seconds before trying again")
|
|
236
|
+
sleep Chef::Config[:interval]
|
|
237
|
+
retry
|
|
238
|
+
else
|
|
239
|
+
raise
|
|
240
|
+
end
|
|
241
|
+
ensure
|
|
242
|
+
GC.start
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|