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,90 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Ian Meyer (<ianmmeyer@gmail.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010 Ian Meyer
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/knife'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Knife
|
|
23
|
+
class Status < Knife
|
|
24
|
+
|
|
25
|
+
deps do
|
|
26
|
+
require 'highline'
|
|
27
|
+
require 'chef/search/query'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
banner "knife status QUERY (options)"
|
|
31
|
+
|
|
32
|
+
option :run_list,
|
|
33
|
+
:short => "-r",
|
|
34
|
+
:long => "--run-list",
|
|
35
|
+
:description => "Show the run list"
|
|
36
|
+
|
|
37
|
+
def highline
|
|
38
|
+
@h ||= HighLine.new
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def run
|
|
42
|
+
all_nodes = []
|
|
43
|
+
q = Chef::Search::Query.new
|
|
44
|
+
query = @name_args[0] || "*:*"
|
|
45
|
+
q.search(:node, query) do |node|
|
|
46
|
+
all_nodes << node
|
|
47
|
+
end
|
|
48
|
+
all_nodes.sort { |n1, n2| (n1["ohai_time"] or 0) <=> (n2["ohai_time"] or 0) }.each do |node|
|
|
49
|
+
if node.has_key?("ec2")
|
|
50
|
+
fqdn = node['ec2']['public_hostname']
|
|
51
|
+
ipaddress = node['ec2']['public_ipv4']
|
|
52
|
+
else
|
|
53
|
+
fqdn = node['fqdn']
|
|
54
|
+
ipaddress = node['ipaddress']
|
|
55
|
+
end
|
|
56
|
+
hours, minutes, seconds = time_difference_in_hms(node["ohai_time"])
|
|
57
|
+
hours_text = "#{hours} hour#{hours == 1 ? ' ' : 's'}"
|
|
58
|
+
minutes_text = "#{minutes} minute#{minutes == 1 ? ' ' : 's'}"
|
|
59
|
+
run_list = ", #{node.run_list}." if config[:run_list]
|
|
60
|
+
if hours > 24
|
|
61
|
+
color = "RED"
|
|
62
|
+
text = hours_text
|
|
63
|
+
elsif hours >= 1
|
|
64
|
+
color = "YELLOW"
|
|
65
|
+
text = hours_text
|
|
66
|
+
else
|
|
67
|
+
color = "GREEN"
|
|
68
|
+
text = minutes_text
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
highline.say("<%= color('#{text}', #{color}) %> ago, #{node.name}, #{node['platform']} #{node['platform_version']}, #{fqdn}, #{ipaddress}#{run_list}")
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# :nodoc:
|
|
77
|
+
# TODO: this is duplicated from StatusHelper in the Webui. dedup.
|
|
78
|
+
def time_difference_in_hms(unix_time)
|
|
79
|
+
now = Time.now.to_i
|
|
80
|
+
difference = now - unix_time.to_i
|
|
81
|
+
hours = (difference / 3600).to_i
|
|
82
|
+
difference = difference % 3600
|
|
83
|
+
minutes = (difference / 60).to_i
|
|
84
|
+
seconds = (difference % 60)
|
|
85
|
+
return [hours, minutes, seconds]
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Christopher Brown (<cb@opscode.com>)
|
|
4
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
|
5
|
+
# Copyright:: Copyright (c) 2009, 2011 Opscode, Inc.
|
|
6
|
+
# License:: Apache License, Version 2.0
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
require 'chef/version'
|
|
22
|
+
|
|
23
|
+
class Chef
|
|
24
|
+
class Knife
|
|
25
|
+
class SubcommandLoader
|
|
26
|
+
|
|
27
|
+
CHEF_FILE_IN_GEM = /chef-[\d]+\.[\d]+\.[\d]+/
|
|
28
|
+
CURRENT_CHEF_GEM = /chef-#{Regexp.escape(Chef::VERSION)}/
|
|
29
|
+
|
|
30
|
+
attr_reader :chef_config_dir
|
|
31
|
+
attr_reader :env
|
|
32
|
+
|
|
33
|
+
def initialize(chef_config_dir, env=ENV)
|
|
34
|
+
@chef_config_dir, @env = chef_config_dir, env
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Load all the sub-commands
|
|
38
|
+
def load_commands
|
|
39
|
+
subcommand_files.each { |subcommand| require subcommand }
|
|
40
|
+
true
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Returns an Array of paths to knife commands located in chef_config_dir/plugins/knife/
|
|
44
|
+
# and ~/.chef/plugins/knife/
|
|
45
|
+
def site_subcommands
|
|
46
|
+
user_specific_files = []
|
|
47
|
+
|
|
48
|
+
if chef_config_dir
|
|
49
|
+
user_specific_files.concat Dir.glob(File.expand_path("plugins/knife/*.rb", chef_config_dir))
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# finally search ~/.chef/plugins/knife/*.rb
|
|
53
|
+
user_specific_files.concat Dir.glob(File.join(env['HOME'], '.chef', 'plugins', 'knife', '*.rb'))
|
|
54
|
+
|
|
55
|
+
user_specific_files.map! { |path| path[/(.+).rb/, 1] }
|
|
56
|
+
user_specific_files
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Returns an Array of paths to knife commands built-in to chef, or installed via gem.
|
|
60
|
+
# If rubygems is not installed, falls back to globbing the knife directory.
|
|
61
|
+
def gem_and_builtin_subcommands
|
|
62
|
+
# search all gems for chef/knife/*.rb
|
|
63
|
+
require 'rubygems'
|
|
64
|
+
find_subcommands_via_rubygems
|
|
65
|
+
rescue LoadError
|
|
66
|
+
find_subcommands_via_dirglob
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def subcommand_files
|
|
70
|
+
@subcommand_files ||= (gem_and_builtin_subcommands + site_subcommands).flatten.uniq
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def find_subcommands_via_dirglob
|
|
74
|
+
# The "require paths" of the core knife subcommands bundled with chef
|
|
75
|
+
files = Dir[File.expand_path('../../knife/*.rb', __FILE__)]
|
|
76
|
+
files.map! { |knife_file| knife_file[/#{CHEF_ROOT}#{Regexp.escape(File::SEPARATOR)}(.*)\.rb/,1] }
|
|
77
|
+
files
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def find_subcommands_via_rubygems
|
|
81
|
+
files = Gem.find_files 'chef/knife/*.rb'
|
|
82
|
+
files.reject! {|f| from_old_gem?(f) }
|
|
83
|
+
files.map! do |file|
|
|
84
|
+
file[/(#{Regexp.escape File.join('chef', 'knife', '')}.*)\.rb/, 1]
|
|
85
|
+
end.uniq!
|
|
86
|
+
files
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
private
|
|
90
|
+
|
|
91
|
+
# wow, this is a sad hack :(
|
|
92
|
+
# Gem.find_files finds files in all versions of a gem, which
|
|
93
|
+
# means that if chef 0.10 and 0.9.x are installed, we'll try to
|
|
94
|
+
# require, e.g., chef/knife/ec2_server_create, which will cause
|
|
95
|
+
# a gem activation error. So remove files from older chef gems.
|
|
96
|
+
def from_old_gem?(path)
|
|
97
|
+
path =~ CHEF_FILE_IN_GEM && path !~ CURRENT_CHEF_GEM
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'chef/knife'
|
|
2
|
+
|
|
3
|
+
class Chef
|
|
4
|
+
class Knife
|
|
5
|
+
class TagCreate < Knife
|
|
6
|
+
|
|
7
|
+
deps do
|
|
8
|
+
require 'chef/node'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
banner "knife tag create NODE TAG ..."
|
|
12
|
+
|
|
13
|
+
def run
|
|
14
|
+
name = @name_args[0]
|
|
15
|
+
tags = @name_args[1..-1].join(",").split(/\s*,\s*/)
|
|
16
|
+
|
|
17
|
+
unless name or tags.empty?
|
|
18
|
+
show_usage
|
|
19
|
+
# TODO: blah blah
|
|
20
|
+
ui.fatal("You must specify a node name")
|
|
21
|
+
exit 1
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
node = Chef::Node.load name
|
|
25
|
+
tags.each do |tag|
|
|
26
|
+
node.tags << tag
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'chef/knife'
|
|
2
|
+
|
|
3
|
+
class Chef
|
|
4
|
+
class Knife
|
|
5
|
+
class TagDelete < Knife
|
|
6
|
+
|
|
7
|
+
deps do
|
|
8
|
+
require 'chef/node'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
banner "knife tag delete NODE TAG ..."
|
|
12
|
+
|
|
13
|
+
def run
|
|
14
|
+
name = @name_args[0]
|
|
15
|
+
tags = @name_args[1..-1].join(",").split(/\s*,\s*/)
|
|
16
|
+
|
|
17
|
+
unless name or tags.empty?
|
|
18
|
+
show_usage
|
|
19
|
+
# TODO: blah blah
|
|
20
|
+
ui.fatal("You must specify a node name")
|
|
21
|
+
exit 1
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
node = Chef::Node.load name
|
|
25
|
+
tags.each do |tag|
|
|
26
|
+
node.tags.delete tag
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'chef/knife'
|
|
2
|
+
|
|
3
|
+
class Chef
|
|
4
|
+
class Knife
|
|
5
|
+
class TagList < Knife
|
|
6
|
+
|
|
7
|
+
deps do
|
|
8
|
+
require 'chef/node'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
banner "knife tag list NODE"
|
|
12
|
+
|
|
13
|
+
def run
|
|
14
|
+
name = @name_args[0]
|
|
15
|
+
tags = @name_args[1..-1].join(",").split(/\s*,\s*/)
|
|
16
|
+
|
|
17
|
+
unless name or tags.empty?
|
|
18
|
+
show_usage
|
|
19
|
+
# TODO: blah blah
|
|
20
|
+
ui.fatal("You must specify a node name")
|
|
21
|
+
exit 1
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
node = Chef::Node.load name
|
|
25
|
+
output node.tags
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Christopher Brown (<cb@opscode.com>)
|
|
4
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
|
5
|
+
# Copyright:: Copyright (c) 2009, 2011 Opscode, Inc.
|
|
6
|
+
# License:: Apache License, Version 2.0
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Chef
|
|
23
|
+
class Knife
|
|
24
|
+
class UI
|
|
25
|
+
|
|
26
|
+
attr_reader :stdout
|
|
27
|
+
attr_reader :stderr
|
|
28
|
+
attr_reader :stdin
|
|
29
|
+
attr_reader :config
|
|
30
|
+
|
|
31
|
+
def initialize(stdout, stderr, stdin, config)
|
|
32
|
+
@stdout, @stderr, @stdin, @config = stdout, stderr, stdin, config
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def highline
|
|
36
|
+
@highline ||= begin
|
|
37
|
+
require 'highline'
|
|
38
|
+
HighLine.new
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def msg(message)
|
|
43
|
+
stdout.puts message
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
alias :info :msg
|
|
47
|
+
|
|
48
|
+
def warn(message)
|
|
49
|
+
msg("WARNING: #{message}")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def error(message)
|
|
53
|
+
msg("ERROR: #{message}")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def fatal(message)
|
|
57
|
+
msg("FATAL: #{message}")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def color(*args)
|
|
61
|
+
highline.color(*args)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def ask(*args, &block)
|
|
65
|
+
highline.ask(*args, &block)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def list(*args)
|
|
69
|
+
highline.list(*args)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def ask_question(question, opts={})
|
|
73
|
+
question = question + "[#{opts[:default]}] " if opts[:default]
|
|
74
|
+
|
|
75
|
+
if opts[:default] and config[:defaults]
|
|
76
|
+
opts[:default]
|
|
77
|
+
else
|
|
78
|
+
stdout.print question
|
|
79
|
+
a = stdin.readline.strip
|
|
80
|
+
|
|
81
|
+
if opts[:default]
|
|
82
|
+
a.empty? ? opts[:default] : a
|
|
83
|
+
else
|
|
84
|
+
a
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def pretty_print(data)
|
|
90
|
+
stdout.puts data
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def output(data)
|
|
94
|
+
case config[:format]
|
|
95
|
+
when "json", nil
|
|
96
|
+
stdout.puts Chef::JSONCompat.to_json_pretty(data)
|
|
97
|
+
when "yaml"
|
|
98
|
+
require 'yaml'
|
|
99
|
+
stdout.puts YAML::dump(data)
|
|
100
|
+
when "text"
|
|
101
|
+
# If you were looking for some attribute and there is only one match
|
|
102
|
+
# just dump the attribute value
|
|
103
|
+
if data.length == 1 and config[:attribute]
|
|
104
|
+
stdout.puts data.values[0]
|
|
105
|
+
else
|
|
106
|
+
PP.pp(data, stdout)
|
|
107
|
+
end
|
|
108
|
+
else
|
|
109
|
+
raise ArgumentError, "Unknown output format #{config[:format]}"
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def format_list_for_display(list)
|
|
114
|
+
config[:with_uri] ? list : list.keys.sort { |a,b| a <=> b }
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def format_for_display(data)
|
|
118
|
+
if config[:attribute]
|
|
119
|
+
config[:attribute].split(".").each do |attr|
|
|
120
|
+
if data.respond_to?(:[])
|
|
121
|
+
data = data[attr]
|
|
122
|
+
elsif data.nil?
|
|
123
|
+
nil # don't get no method error on nil
|
|
124
|
+
else data.respond_to?(attr.to_sym)
|
|
125
|
+
data = data.send(attr.to_sym)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
{ config[:attribute] => data.respond_to?(:to_hash) ? data.to_hash : data }
|
|
129
|
+
elsif config[:run_list]
|
|
130
|
+
data = data.run_list.run_list
|
|
131
|
+
{ "run_list" => data }
|
|
132
|
+
elsif config[:environment]
|
|
133
|
+
if data.respond_to?(:chef_environment)
|
|
134
|
+
{"chef_environment" => data.chef_environment}
|
|
135
|
+
else
|
|
136
|
+
# this is a place holder for now. Feel free to modify (i.e. add other cases). [nuo]
|
|
137
|
+
data
|
|
138
|
+
end
|
|
139
|
+
elsif config[:id_only]
|
|
140
|
+
data.respond_to?(:name) ? data.name : data["id"]
|
|
141
|
+
else
|
|
142
|
+
data
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def format_cookbook_list_for_display(item)
|
|
147
|
+
if config[:with_uri]
|
|
148
|
+
item
|
|
149
|
+
else
|
|
150
|
+
item.inject({}){|result, (k,v)|
|
|
151
|
+
result[k] = v["versions"].inject([]){|res, ver| res.push(ver["version"]); res}
|
|
152
|
+
result
|
|
153
|
+
}
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def edit_data(data, parse_output=true)
|
|
158
|
+
output = Chef::JSONCompat.to_json_pretty(data)
|
|
159
|
+
|
|
160
|
+
if (!config[:no_editor])
|
|
161
|
+
filename = "knife-edit-"
|
|
162
|
+
0.upto(20) { filename += rand(9).to_s }
|
|
163
|
+
filename << ".js"
|
|
164
|
+
filename = File.join(Dir.tmpdir, filename)
|
|
165
|
+
tf = File.open(filename, "w")
|
|
166
|
+
tf.sync = true
|
|
167
|
+
tf.puts output
|
|
168
|
+
tf.close
|
|
169
|
+
raise "Please set EDITOR environment variable" unless system("#{config[:editor]} #{tf.path}")
|
|
170
|
+
tf = File.open(filename, "r")
|
|
171
|
+
output = tf.gets(nil)
|
|
172
|
+
tf.close
|
|
173
|
+
File.unlink(filename)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
parse_output ? Chef::JSONCompat.from_json(output) : output
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def edit_object(klass, name)
|
|
180
|
+
object = klass.load(name)
|
|
181
|
+
|
|
182
|
+
output = edit_data(object)
|
|
183
|
+
|
|
184
|
+
# Only make the save if the user changed the object.
|
|
185
|
+
#
|
|
186
|
+
# Output JSON for the original (object) and edited (output), then parse
|
|
187
|
+
# them without reconstituting the objects into real classes
|
|
188
|
+
# (create_additions=false). Then, compare the resulting simple objects,
|
|
189
|
+
# which will be Array/Hash/String/etc.
|
|
190
|
+
#
|
|
191
|
+
# We wouldn't have to do these shenanigans if all the editable objects
|
|
192
|
+
# implemented to_hash, or if to_json against a hash returned a string
|
|
193
|
+
# with stable key order.
|
|
194
|
+
object_parsed_again = Chef::JSONCompat.from_json(Chef::JSONCompat.to_json(object), :create_additions => false)
|
|
195
|
+
output_parsed_again = Chef::JSONCompat.from_json(Chef::JSONCompat.to_json(output), :create_additions => false)
|
|
196
|
+
if object_parsed_again != output_parsed_again
|
|
197
|
+
output.save
|
|
198
|
+
self.msg("Saved #{output}")
|
|
199
|
+
else
|
|
200
|
+
self.msg("Object unchanged, not saving")
|
|
201
|
+
end
|
|
202
|
+
output(format_for_display(object)) if config[:print_after]
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def confirm(question, append_instructions=true)
|
|
206
|
+
return true if config[:yes]
|
|
207
|
+
|
|
208
|
+
stdout.print question
|
|
209
|
+
stdout.print "? (Y/N) " if append_instructions
|
|
210
|
+
answer = stdin.readline
|
|
211
|
+
answer.chomp!
|
|
212
|
+
case answer
|
|
213
|
+
when "Y", "y"
|
|
214
|
+
true
|
|
215
|
+
when "N", "n"
|
|
216
|
+
self.msg("You said no, so I'm done here.")
|
|
217
|
+
exit 3
|
|
218
|
+
else
|
|
219
|
+
self.msg("I have no idea what to do with #{answer}")
|
|
220
|
+
self.msg("Just say Y or N, please.")
|
|
221
|
+
confirm(question)
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
end
|