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,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,242 @@
|
|
|
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 :help,
|
|
48
|
+
:short => "-h",
|
|
49
|
+
:long => "--help",
|
|
50
|
+
:description => "Show this message",
|
|
51
|
+
:on => :tail,
|
|
52
|
+
:boolean => true,
|
|
53
|
+
:show_options => true,
|
|
54
|
+
:exit => 0
|
|
55
|
+
|
|
56
|
+
option :user,
|
|
57
|
+
:short => "-u USER",
|
|
58
|
+
:long => "--user USER",
|
|
59
|
+
:description => "User to set privilege to",
|
|
60
|
+
:proc => nil
|
|
61
|
+
|
|
62
|
+
option :group,
|
|
63
|
+
:short => "-g GROUP",
|
|
64
|
+
:long => "--group GROUP",
|
|
65
|
+
:description => "Group to set privilege to",
|
|
66
|
+
:proc => nil
|
|
67
|
+
|
|
68
|
+
option :daemonize,
|
|
69
|
+
:short => "-d",
|
|
70
|
+
:long => "--daemonize",
|
|
71
|
+
:description => "Daemonize the process",
|
|
72
|
+
:proc => lambda { |p| true }
|
|
73
|
+
|
|
74
|
+
option :pid_file,
|
|
75
|
+
:short => "-P PID_FILE",
|
|
76
|
+
:long => "--pid PIDFILE",
|
|
77
|
+
:description => "Set the PID file location, defaults to /tmp/chef-client.pid",
|
|
78
|
+
:proc => nil
|
|
79
|
+
|
|
80
|
+
option :interval,
|
|
81
|
+
:short => "-i SECONDS",
|
|
82
|
+
:long => "--interval SECONDS",
|
|
83
|
+
:description => "Run chef-client periodically, in seconds",
|
|
84
|
+
:proc => lambda { |s| s.to_i }
|
|
85
|
+
|
|
86
|
+
option :once,
|
|
87
|
+
:long => "--once",
|
|
88
|
+
:description => "Cancel any interval or splay options, run chef once and exit",
|
|
89
|
+
:boolean => true
|
|
90
|
+
|
|
91
|
+
option :json_attribs,
|
|
92
|
+
:short => "-j JSON_ATTRIBS",
|
|
93
|
+
:long => "--json-attributes JSON_ATTRIBS",
|
|
94
|
+
:description => "Load attributes from a JSON file or URL",
|
|
95
|
+
:proc => nil
|
|
96
|
+
|
|
97
|
+
option :node_name,
|
|
98
|
+
:short => "-N NODE_NAME",
|
|
99
|
+
:long => "--node-name NODE_NAME",
|
|
100
|
+
:description => "The node name for this client",
|
|
101
|
+
:proc => nil
|
|
102
|
+
|
|
103
|
+
option :splay,
|
|
104
|
+
:short => "-s SECONDS",
|
|
105
|
+
:long => "--splay SECONDS",
|
|
106
|
+
:description => "The splay time for running at intervals, in seconds",
|
|
107
|
+
:proc => lambda { |s| s.to_i }
|
|
108
|
+
|
|
109
|
+
option :chef_server_url,
|
|
110
|
+
:short => "-S CHEFSERVERURL",
|
|
111
|
+
:long => "--server CHEFSERVERURL",
|
|
112
|
+
:description => "The chef server URL",
|
|
113
|
+
:proc => nil
|
|
114
|
+
|
|
115
|
+
option :validation_key,
|
|
116
|
+
:short => "-K KEY_FILE",
|
|
117
|
+
:long => "--validation_key KEY_FILE",
|
|
118
|
+
:description => "Set the validation key file location, used for registering new clients",
|
|
119
|
+
:proc => nil
|
|
120
|
+
|
|
121
|
+
option :client_key,
|
|
122
|
+
:short => "-k KEY_FILE",
|
|
123
|
+
:long => "--client_key KEY_FILE",
|
|
124
|
+
:description => "Set the client key file location",
|
|
125
|
+
:proc => nil
|
|
126
|
+
|
|
127
|
+
option :version,
|
|
128
|
+
:short => "-v",
|
|
129
|
+
:long => "--version",
|
|
130
|
+
:description => "Show chef version",
|
|
131
|
+
:boolean => true,
|
|
132
|
+
:proc => lambda {|v| puts "Chef: #{::Chef::VERSION}"},
|
|
133
|
+
:exit => 0
|
|
134
|
+
|
|
135
|
+
attr_reader :chef_client_json
|
|
136
|
+
|
|
137
|
+
def initialize
|
|
138
|
+
super
|
|
139
|
+
|
|
140
|
+
@chef_client = nil
|
|
141
|
+
@chef_client_json = nil
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Reconfigure the chef client
|
|
145
|
+
# Re-open the JSON attributes and load them into the node
|
|
146
|
+
def reconfigure
|
|
147
|
+
super
|
|
148
|
+
|
|
149
|
+
Chef::Config[:chef_server_url] = config[:chef_server_url] if config.has_key? :chef_server_url
|
|
150
|
+
|
|
151
|
+
if Chef::Config[:daemonize]
|
|
152
|
+
Chef::Config[:interval] ||= 1800
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
if Chef::Config[:once]
|
|
156
|
+
Chef::Config[:interval] = nil
|
|
157
|
+
Chef::Config[:splay] = nil
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
if Chef::Config[:json_attribs]
|
|
161
|
+
begin
|
|
162
|
+
json_io = case Chef::Config[:json_attribs]
|
|
163
|
+
when /^(http|https):\/\//
|
|
164
|
+
@rest = Chef::REST.new(Chef::Config[:json_attribs], nil, nil)
|
|
165
|
+
@rest.get_rest(Chef::Config[:json_attribs], true).open
|
|
166
|
+
else
|
|
167
|
+
open(Chef::Config[:json_attribs])
|
|
168
|
+
end
|
|
169
|
+
rescue SocketError => error
|
|
170
|
+
Chef::Application.fatal!("I cannot connect to #{Chef::Config[:json_attribs]}", 2)
|
|
171
|
+
rescue Errno::ENOENT => error
|
|
172
|
+
Chef::Application.fatal!("I cannot find #{Chef::Config[:json_attribs]}", 2)
|
|
173
|
+
rescue Errno::EACCES => error
|
|
174
|
+
Chef::Application.fatal!("Permissions are incorrect on #{Chef::Config[:json_attribs]}. Please chmod a+r #{Chef::Config[:json_attribs]}", 2)
|
|
175
|
+
rescue Exception => error
|
|
176
|
+
Chef::Application.fatal!("Got an unexpected error reading #{Chef::Config[:json_attribs]}: #{error.message}", 2)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
begin
|
|
180
|
+
@chef_client_json = Chef::JSONCompat.from_json(json_io.read)
|
|
181
|
+
json_io.close unless json_io.closed?
|
|
182
|
+
rescue JSON::ParserError => error
|
|
183
|
+
Chef::Application.fatal!("Could not parse the provided JSON file (#{Chef::Config[:json_attribs]})!: " + error.message, 2)
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def configure_logging
|
|
189
|
+
super
|
|
190
|
+
Mixlib::Authentication::Log.use_log_devices( Chef::Log )
|
|
191
|
+
Ohai::Log.use_log_devices( Chef::Log )
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def setup_application
|
|
195
|
+
Chef::Daemon.change_privilege
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Run the chef client, optionally daemonizing or looping at intervals.
|
|
199
|
+
def run_application
|
|
200
|
+
if Chef::Config[:version]
|
|
201
|
+
puts "Chef version: #{::Chef::VERSION}"
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
if Chef::Config[:daemonize]
|
|
205
|
+
Chef::Daemon.daemonize("chef-client")
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
loop do
|
|
209
|
+
begin
|
|
210
|
+
if Chef::Config[:splay]
|
|
211
|
+
splay = rand Chef::Config[:splay]
|
|
212
|
+
Chef::Log.debug("Splay sleep #{splay} seconds")
|
|
213
|
+
sleep splay
|
|
214
|
+
end
|
|
215
|
+
@chef_client = Chef::Client.new(@chef_client_json)
|
|
216
|
+
@chef_client_json = nil
|
|
217
|
+
|
|
218
|
+
@chef_client.run
|
|
219
|
+
@chef_client = nil
|
|
220
|
+
if Chef::Config[:interval]
|
|
221
|
+
Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds")
|
|
222
|
+
sleep Chef::Config[:interval]
|
|
223
|
+
else
|
|
224
|
+
Chef::Application.exit! "Exiting", 0
|
|
225
|
+
end
|
|
226
|
+
rescue SystemExit => e
|
|
227
|
+
raise
|
|
228
|
+
rescue Exception => e
|
|
229
|
+
if Chef::Config[:interval]
|
|
230
|
+
Chef::Log.error("#{e.class}:#{e}\n#{e.backtrace.join("\n")}")
|
|
231
|
+
Chef::Log.error("Sleeping for #{Chef::Config[:interval]} seconds before trying again")
|
|
232
|
+
sleep Chef::Config[:interval]
|
|
233
|
+
retry
|
|
234
|
+
else
|
|
235
|
+
raise
|
|
236
|
+
end
|
|
237
|
+
ensure
|
|
238
|
+
GC.start
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
@@ -0,0 +1,169 @@
|
|
|
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
|
+
require 'chef/knife'
|
|
19
|
+
require 'chef/application'
|
|
20
|
+
require 'mixlib/log'
|
|
21
|
+
require 'ohai'
|
|
22
|
+
|
|
23
|
+
class Chef::Application::Knife < Chef::Application
|
|
24
|
+
|
|
25
|
+
NO_COMMAND_GIVEN = "You need to pass a sub-command (e.g., knife SUB-COMMAND)\n"
|
|
26
|
+
|
|
27
|
+
banner "Usage: #{$0} sub-command (options)"
|
|
28
|
+
|
|
29
|
+
option :config_file,
|
|
30
|
+
:short => "-c CONFIG",
|
|
31
|
+
:long => "--config CONFIG",
|
|
32
|
+
:description => "The configuration file to use",
|
|
33
|
+
:proc => lambda { |path| File.expand_path(path, Dir.pwd) }
|
|
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",
|
|
45
|
+
:proc => nil
|
|
46
|
+
|
|
47
|
+
option :environment,
|
|
48
|
+
:short => "-E ENVIRONMENT",
|
|
49
|
+
:long => "--environment ENVIRONMENT",
|
|
50
|
+
:description => "Set the Chef environment"
|
|
51
|
+
|
|
52
|
+
option :editor,
|
|
53
|
+
:short => "-e EDITOR",
|
|
54
|
+
:long => "--editor EDITOR",
|
|
55
|
+
:description => "Set the editor to use for interactive commands",
|
|
56
|
+
:default => ENV['EDITOR']
|
|
57
|
+
|
|
58
|
+
option :no_editor,
|
|
59
|
+
:short => "-n",
|
|
60
|
+
:long => "--no-editor",
|
|
61
|
+
:description => "Do not open EDITOR, just accept the data as is",
|
|
62
|
+
:boolean => true
|
|
63
|
+
|
|
64
|
+
option :help,
|
|
65
|
+
:short => "-h",
|
|
66
|
+
:long => "--help",
|
|
67
|
+
:description => "Show this message",
|
|
68
|
+
:on => :tail,
|
|
69
|
+
:boolean => true
|
|
70
|
+
|
|
71
|
+
option :node_name,
|
|
72
|
+
:short => "-u USER",
|
|
73
|
+
:long => "--user USER",
|
|
74
|
+
:description => "API Client Username"
|
|
75
|
+
|
|
76
|
+
option :client_key,
|
|
77
|
+
:short => "-k KEY",
|
|
78
|
+
:long => "--key KEY",
|
|
79
|
+
:description => "API Client Key",
|
|
80
|
+
:proc => lambda { |path| File.expand_path(path, Dir.pwd) }
|
|
81
|
+
|
|
82
|
+
option :chef_server_url,
|
|
83
|
+
:short => "-s URL",
|
|
84
|
+
:long => "--server-url URL",
|
|
85
|
+
:description => "Chef Server URL"
|
|
86
|
+
|
|
87
|
+
option :yes,
|
|
88
|
+
:short => "-y",
|
|
89
|
+
:long => "--yes",
|
|
90
|
+
:description => "Say yes to all prompts for confirmation"
|
|
91
|
+
|
|
92
|
+
option :defaults,
|
|
93
|
+
:long => "--defaults",
|
|
94
|
+
:description => "Accept default values for all questions"
|
|
95
|
+
|
|
96
|
+
option :print_after,
|
|
97
|
+
:short => "-p",
|
|
98
|
+
:long => "--print-after",
|
|
99
|
+
:description => "Show the data after a destructive operation"
|
|
100
|
+
|
|
101
|
+
option :format,
|
|
102
|
+
:short => "-F FORMAT",
|
|
103
|
+
:long => "--format FORMAT",
|
|
104
|
+
:description => "Which format to use for output",
|
|
105
|
+
:default => "json"
|
|
106
|
+
|
|
107
|
+
option :version,
|
|
108
|
+
:short => "-v",
|
|
109
|
+
:long => "--version",
|
|
110
|
+
:description => "Show chef version",
|
|
111
|
+
:boolean => true,
|
|
112
|
+
:proc => lambda {|v| puts "Chef: #{::Chef::VERSION}"},
|
|
113
|
+
:exit => 0
|
|
114
|
+
|
|
115
|
+
# Run knife
|
|
116
|
+
def run
|
|
117
|
+
Mixlib::Log::Formatter.show_time = false
|
|
118
|
+
validate_and_parse_options
|
|
119
|
+
Chef::Knife.run(ARGV, options)
|
|
120
|
+
exit 0
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
private
|
|
124
|
+
|
|
125
|
+
def validate_and_parse_options
|
|
126
|
+
# Checking ARGV validity *before* parse_options because parse_options
|
|
127
|
+
# mangles ARGV in some situations
|
|
128
|
+
if no_command_given?
|
|
129
|
+
print_help_and_exit(1, NO_COMMAND_GIVEN)
|
|
130
|
+
elsif no_subcommand_given?
|
|
131
|
+
if (want_help? || want_version?)
|
|
132
|
+
print_help_and_exit
|
|
133
|
+
else
|
|
134
|
+
print_help_and_exit(2, NO_COMMAND_GIVEN)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def no_subcommand_given?
|
|
140
|
+
ARGV[0] =~ /^-/
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def no_command_given?
|
|
144
|
+
ARGV.empty?
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def want_help?
|
|
148
|
+
ARGV[0] =~ /^(--help|-h)$/
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def want_version?
|
|
152
|
+
ARGV[0] =~ /^(--version|-v)$/
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def print_help_and_exit(exitcode=1, fatal_message=nil)
|
|
156
|
+
Chef::Log.error(fatal_message) if fatal_message
|
|
157
|
+
|
|
158
|
+
begin
|
|
159
|
+
self.parse_options
|
|
160
|
+
rescue OptionParser::InvalidOption => e
|
|
161
|
+
puts "#{e}\n"
|
|
162
|
+
end
|
|
163
|
+
puts self.opt_parser
|
|
164
|
+
puts
|
|
165
|
+
Chef::Knife.list_commands
|
|
166
|
+
exit exitcode
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
end
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: AJ Christensen (<aj@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
|
+
require 'chef'
|
|
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
|
+
require 'open-uri'
|
|
26
|
+
require 'fileutils'
|
|
27
|
+
|
|
28
|
+
class Chef::Application::Solo < Chef::Application
|
|
29
|
+
|
|
30
|
+
option :config_file,
|
|
31
|
+
:short => "-c CONFIG",
|
|
32
|
+
:long => "--config CONFIG",
|
|
33
|
+
:default => "/etc/chef/solo.rb",
|
|
34
|
+
:description => "The configuration file to use"
|
|
35
|
+
|
|
36
|
+
option :log_level,
|
|
37
|
+
:short => "-l LEVEL",
|
|
38
|
+
:long => "--log_level LEVEL",
|
|
39
|
+
:description => "Set the log level (debug, info, warn, error, fatal)",
|
|
40
|
+
:proc => lambda { |l| l.to_sym }
|
|
41
|
+
|
|
42
|
+
option :log_location,
|
|
43
|
+
:short => "-L LOGLOCATION",
|
|
44
|
+
:long => "--logfile LOGLOCATION",
|
|
45
|
+
:description => "Set the log file location, defaults to STDOUT",
|
|
46
|
+
:proc => nil
|
|
47
|
+
|
|
48
|
+
option :help,
|
|
49
|
+
:short => "-h",
|
|
50
|
+
:long => "--help",
|
|
51
|
+
:description => "Show this message",
|
|
52
|
+
:on => :tail,
|
|
53
|
+
:boolean => true,
|
|
54
|
+
:show_options => true,
|
|
55
|
+
:exit => 0
|
|
56
|
+
|
|
57
|
+
option :user,
|
|
58
|
+
:short => "-u USER",
|
|
59
|
+
:long => "--user USER",
|
|
60
|
+
:description => "User to set privilege to",
|
|
61
|
+
:proc => nil
|
|
62
|
+
|
|
63
|
+
option :group,
|
|
64
|
+
:short => "-g GROUP",
|
|
65
|
+
:long => "--group GROUP",
|
|
66
|
+
:description => "Group to set privilege to",
|
|
67
|
+
:proc => nil
|
|
68
|
+
|
|
69
|
+
option :daemonize,
|
|
70
|
+
:short => "-d",
|
|
71
|
+
:long => "--daemonize",
|
|
72
|
+
:description => "Daemonize the process",
|
|
73
|
+
:proc => lambda { |p| true }
|
|
74
|
+
|
|
75
|
+
option :interval,
|
|
76
|
+
:short => "-i SECONDS",
|
|
77
|
+
:long => "--interval SECONDS",
|
|
78
|
+
:description => "Run chef-client periodically, in seconds",
|
|
79
|
+
:proc => lambda { |s| s.to_i }
|
|
80
|
+
|
|
81
|
+
option :json_attribs,
|
|
82
|
+
:short => "-j JSON_ATTRIBS",
|
|
83
|
+
:long => "--json-attributes JSON_ATTRIBS",
|
|
84
|
+
:description => "Load attributes from a JSON file or URL",
|
|
85
|
+
:proc => nil
|
|
86
|
+
|
|
87
|
+
option :node_name,
|
|
88
|
+
:short => "-N NODE_NAME",
|
|
89
|
+
:long => "--node-name NODE_NAME",
|
|
90
|
+
:description => "The node name for this client",
|
|
91
|
+
:proc => nil
|
|
92
|
+
|
|
93
|
+
option :splay,
|
|
94
|
+
:short => "-s SECONDS",
|
|
95
|
+
:long => "--splay SECONDS",
|
|
96
|
+
:description => "The splay time for running at intervals, in seconds",
|
|
97
|
+
:proc => lambda { |s| s.to_i }
|
|
98
|
+
|
|
99
|
+
option :recipe_url,
|
|
100
|
+
:short => "-r RECIPE_URL",
|
|
101
|
+
:long => "--recipe-url RECIPE_URL",
|
|
102
|
+
:description => "Pull down a remote gzipped tarball of recipes and untar it to the cookbook cache.",
|
|
103
|
+
:proc => nil
|
|
104
|
+
|
|
105
|
+
option :version,
|
|
106
|
+
:short => "-v",
|
|
107
|
+
:long => "--version",
|
|
108
|
+
:description => "Show chef version",
|
|
109
|
+
:boolean => true,
|
|
110
|
+
:proc => lambda {|v| puts "Chef: #{::Chef::VERSION}"},
|
|
111
|
+
:exit => 0
|
|
112
|
+
|
|
113
|
+
attr_reader :chef_solo_json
|
|
114
|
+
|
|
115
|
+
def initialize
|
|
116
|
+
super
|
|
117
|
+
@chef_solo = nil
|
|
118
|
+
@chef_solo_json = nil
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def reconfigure
|
|
122
|
+
super
|
|
123
|
+
|
|
124
|
+
Chef::Config[:solo] = true
|
|
125
|
+
|
|
126
|
+
if Chef::Config[:daemonize]
|
|
127
|
+
Chef::Config[:interval] ||= 1800
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
if Chef::Config[:json_attribs]
|
|
131
|
+
begin
|
|
132
|
+
json_io = case Chef::Config[:json_attribs]
|
|
133
|
+
when /^(http|https):\/\//
|
|
134
|
+
@rest = Chef::REST.new(Chef::Config[:json_attribs], nil, nil)
|
|
135
|
+
@rest.get_rest(Chef::Config[:json_attribs], true).open
|
|
136
|
+
else
|
|
137
|
+
open(Chef::Config[:json_attribs])
|
|
138
|
+
end
|
|
139
|
+
rescue SocketError => error
|
|
140
|
+
Chef::Application.fatal!("I cannot connect to #{Chef::Config[:json_attribs]}", 2)
|
|
141
|
+
rescue Errno::ENOENT => error
|
|
142
|
+
Chef::Application.fatal!("I cannot find #{Chef::Config[:json_attribs]}", 2)
|
|
143
|
+
rescue Errno::EACCES => error
|
|
144
|
+
Chef::Application.fatal!("Permissions are incorrect on #{Chef::Config[:json_attribs]}. Please chmod a+r #{Chef::Config[:json_attribs]}", 2)
|
|
145
|
+
rescue Exception => error
|
|
146
|
+
Chef::Application.fatal!("Got an unexpected error reading #{Chef::Config[:json_attribs]}: #{error.message}", 2)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
begin
|
|
150
|
+
@chef_solo_json = Chef::JSONCompat.from_json(json_io.read)
|
|
151
|
+
json_io.close unless json_io.closed?
|
|
152
|
+
rescue JSON::ParserError => error
|
|
153
|
+
Chef::Application.fatal!("Could not parse the provided JSON file (#{Chef::Config[:json_attribs]})!: " + error.message, 2)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
if Chef::Config[:recipe_url]
|
|
158
|
+
cookbooks_path = Array(Chef::Config[:cookbook_path]).detect{|e| e =~ /\/cookbooks\/*$/ }
|
|
159
|
+
recipes_path = File.expand_path(File.join(cookbooks_path, '..'))
|
|
160
|
+
target_file = File.join(recipes_path, 'recipes.tgz')
|
|
161
|
+
|
|
162
|
+
Chef::Log.debug "Creating path #{recipes_path} to extract recipes into"
|
|
163
|
+
FileUtils.mkdir_p recipes_path
|
|
164
|
+
path = File.join(recipes_path, 'recipes.tgz')
|
|
165
|
+
File.open(path, 'wb') do |f|
|
|
166
|
+
open(Chef::Config[:recipe_url]) do |r|
|
|
167
|
+
f.write(r.read)
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
Chef::Mixin::Command.run_command(:command => "tar zxvfC #{path} #{recipes_path}")
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def setup_application
|
|
175
|
+
Chef::Daemon.change_privilege
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def run_application
|
|
179
|
+
if Chef::Config[:daemonize]
|
|
180
|
+
Chef::Daemon.daemonize("chef-client")
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
loop do
|
|
184
|
+
begin
|
|
185
|
+
if Chef::Config[:splay]
|
|
186
|
+
splay = rand Chef::Config[:splay]
|
|
187
|
+
Chef::Log.debug("Splay sleep #{splay} seconds")
|
|
188
|
+
sleep splay
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
@chef_solo = Chef::Client.new(@chef_solo_json)
|
|
192
|
+
@chef_solo.run
|
|
193
|
+
@chef_solo = nil
|
|
194
|
+
if Chef::Config[:interval]
|
|
195
|
+
Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds")
|
|
196
|
+
sleep Chef::Config[:interval]
|
|
197
|
+
else
|
|
198
|
+
Chef::Application.exit! "Exiting", 0
|
|
199
|
+
end
|
|
200
|
+
rescue SystemExit => e
|
|
201
|
+
raise
|
|
202
|
+
rescue Exception => e
|
|
203
|
+
if Chef::Config[:interval]
|
|
204
|
+
Chef::Log.error("#{e.class}")
|
|
205
|
+
Chef::Log.fatal("#{e}\n#{e.backtrace.join("\n")}")
|
|
206
|
+
Chef::Log.fatal("Sleeping for #{Chef::Config[:interval]} seconds before trying again")
|
|
207
|
+
sleep Chef::Config[:interval]
|
|
208
|
+
retry
|
|
209
|
+
else
|
|
210
|
+
raise
|
|
211
|
+
end
|
|
212
|
+
ensure
|
|
213
|
+
GC.start
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
end
|