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,49 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/knife'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Knife
|
|
23
|
+
class RoleFromFile < Knife
|
|
24
|
+
|
|
25
|
+
deps do
|
|
26
|
+
require 'chef/role'
|
|
27
|
+
require 'chef/json_compat'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
banner "knife role from file FILE (options)"
|
|
31
|
+
|
|
32
|
+
def run
|
|
33
|
+
updated = load_from_file(Chef::Role, @name_args[0])
|
|
34
|
+
|
|
35
|
+
updated.save
|
|
36
|
+
|
|
37
|
+
output(format_for_display(updated)) if config[:print_after]
|
|
38
|
+
|
|
39
|
+
ui.info("Updated Role #{updated.name}!")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/knife'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Knife
|
|
23
|
+
class RoleList < Knife
|
|
24
|
+
|
|
25
|
+
deps do
|
|
26
|
+
require 'chef/node'
|
|
27
|
+
require 'chef/json_compat'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
banner "knife role list (options)"
|
|
31
|
+
|
|
32
|
+
option :with_uri,
|
|
33
|
+
:short => "-w",
|
|
34
|
+
:long => "--with-uri",
|
|
35
|
+
:description => "Show corresponding URIs"
|
|
36
|
+
|
|
37
|
+
def run
|
|
38
|
+
output(format_list_for_display(Chef::Role.list))
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/knife'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Knife
|
|
23
|
+
class RoleShow < Knife
|
|
24
|
+
|
|
25
|
+
deps do
|
|
26
|
+
require 'chef/node'
|
|
27
|
+
require 'chef/json_compat'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
banner "knife role show ROLE (options)"
|
|
31
|
+
|
|
32
|
+
option :attribute,
|
|
33
|
+
:short => "-a ATTR",
|
|
34
|
+
:long => "--attribute ATTR",
|
|
35
|
+
:description => "Show only one attribute"
|
|
36
|
+
|
|
37
|
+
def run
|
|
38
|
+
@role_name = @name_args[0]
|
|
39
|
+
|
|
40
|
+
if @role_name.nil?
|
|
41
|
+
show_usage
|
|
42
|
+
ui.fatal("You must specify a role name")
|
|
43
|
+
exit 1
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
role = Chef::Role.load(@role_name)
|
|
47
|
+
output(format_for_display(config[:environment] ? role.environment(config[:environment]) : role))
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/knife'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Knife
|
|
23
|
+
class Search < Knife
|
|
24
|
+
|
|
25
|
+
deps do
|
|
26
|
+
require 'chef/search/query'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
banner "knife search INDEX QUERY (options)"
|
|
30
|
+
|
|
31
|
+
option :sort,
|
|
32
|
+
:short => "-o SORT",
|
|
33
|
+
:long => "--sort SORT",
|
|
34
|
+
:description => "The order to sort the results in",
|
|
35
|
+
:default => nil
|
|
36
|
+
|
|
37
|
+
option :start,
|
|
38
|
+
:short => "-b ROW",
|
|
39
|
+
:long => "--start ROW",
|
|
40
|
+
:description => "The row to start returning results at",
|
|
41
|
+
:default => 0,
|
|
42
|
+
:proc => lambda { |i| i.to_i }
|
|
43
|
+
|
|
44
|
+
option :rows,
|
|
45
|
+
:short => "-R INT",
|
|
46
|
+
:long => "--rows INT",
|
|
47
|
+
:description => "The number of rows to return",
|
|
48
|
+
:default => 20,
|
|
49
|
+
:proc => lambda { |i| i.to_i }
|
|
50
|
+
|
|
51
|
+
option :attribute,
|
|
52
|
+
:short => "-a ATTR",
|
|
53
|
+
:long => "--attribute ATTR",
|
|
54
|
+
:description => "Show only one attribute"
|
|
55
|
+
|
|
56
|
+
option :run_list,
|
|
57
|
+
:short => "-r",
|
|
58
|
+
:long => "--run-list",
|
|
59
|
+
:description => "Show only the run list"
|
|
60
|
+
|
|
61
|
+
option :id_only,
|
|
62
|
+
:short => "-i",
|
|
63
|
+
:long => "--id-only",
|
|
64
|
+
:description => "Show only the ID of matching objects"
|
|
65
|
+
|
|
66
|
+
option :query,
|
|
67
|
+
:short => "-q QUERY",
|
|
68
|
+
:long => "--query QUERY",
|
|
69
|
+
:description => "The search query; useful to protect queries starting with -"
|
|
70
|
+
|
|
71
|
+
def run
|
|
72
|
+
if config[:query] && @name_args[1]
|
|
73
|
+
puts "please specify query as an argument or an option via -q, not both"
|
|
74
|
+
puts opt_parser
|
|
75
|
+
exit 1
|
|
76
|
+
end
|
|
77
|
+
raw_query = config[:query] || @name_args[1]
|
|
78
|
+
if !raw_query || raw_query.empty?
|
|
79
|
+
puts "no query specified"
|
|
80
|
+
puts opt_parser
|
|
81
|
+
exit 1
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
q = Chef::Search::Query.new
|
|
85
|
+
display = { :total => 0, :start => config[:start] ? config[:start] : 0, :rows => [ ] }
|
|
86
|
+
query = URI.escape(raw_query,
|
|
87
|
+
Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
|
88
|
+
rows = config[:rows] ? config[:rows] : 20
|
|
89
|
+
start = config[:start] ? config[:start] : 0
|
|
90
|
+
begin
|
|
91
|
+
q.search(@name_args[0], query, config[:sort], start, rows) do |item|
|
|
92
|
+
formatted_item = format_for_display(item)
|
|
93
|
+
if formatted_item.respond_to?(:has_key?) && !formatted_item.has_key?('id')
|
|
94
|
+
formatted_item['id'] = item.has_key?('id') ? item['id'] : item.name
|
|
95
|
+
end
|
|
96
|
+
display[:rows] << formatted_item
|
|
97
|
+
display[:total] += 1
|
|
98
|
+
end
|
|
99
|
+
rescue Net::HTTPServerException => e
|
|
100
|
+
msg = Chef::JSONCompat.from_json(e.response.body)["error"].first
|
|
101
|
+
ui.msg("knife search failed: #{msg}")
|
|
102
|
+
exit 1
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
if config[:id_only]
|
|
106
|
+
if config[:attribute]
|
|
107
|
+
display[:rows].each do |row|
|
|
108
|
+
puts row[config[:attribute]] if row.has_key?(config[:attribute]) && !row[config[:attribute]].nil?
|
|
109
|
+
end
|
|
110
|
+
else
|
|
111
|
+
puts display[:rows].join("\n")
|
|
112
|
+
end
|
|
113
|
+
else
|
|
114
|
+
output(display)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/knife'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Knife
|
|
23
|
+
class Ssh < Knife
|
|
24
|
+
|
|
25
|
+
deps do
|
|
26
|
+
require 'net/ssh'
|
|
27
|
+
require 'net/ssh/multi'
|
|
28
|
+
require 'chef/search/query'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
attr_writer :password
|
|
32
|
+
|
|
33
|
+
banner "knife ssh QUERY COMMAND (options)"
|
|
34
|
+
|
|
35
|
+
option :concurrency,
|
|
36
|
+
:short => "-C NUM",
|
|
37
|
+
:long => "--concurrency NUM",
|
|
38
|
+
:description => "The number of concurrent connections",
|
|
39
|
+
:default => nil,
|
|
40
|
+
:proc => lambda { |o| o.to_i }
|
|
41
|
+
|
|
42
|
+
option :attribute,
|
|
43
|
+
:short => "-a ATTR",
|
|
44
|
+
:long => "--attribute ATTR",
|
|
45
|
+
:description => "The attribute to use for opening the connection - default is fqdn",
|
|
46
|
+
:default => "fqdn"
|
|
47
|
+
|
|
48
|
+
option :manual,
|
|
49
|
+
:short => "-m",
|
|
50
|
+
:long => "--manual-list",
|
|
51
|
+
:boolean => true,
|
|
52
|
+
:description => "QUERY is a space separated list of servers",
|
|
53
|
+
:default => false
|
|
54
|
+
|
|
55
|
+
option :ssh_user,
|
|
56
|
+
:short => "-x USERNAME",
|
|
57
|
+
:long => "--ssh-user USERNAME",
|
|
58
|
+
:description => "The ssh username"
|
|
59
|
+
|
|
60
|
+
option :ssh_password,
|
|
61
|
+
:short => "-P PASSWORD",
|
|
62
|
+
:long => "--ssh-password PASSWORD",
|
|
63
|
+
:description => "The ssh password"
|
|
64
|
+
|
|
65
|
+
option :identity_file,
|
|
66
|
+
:short => "-i IDENTITY_FILE",
|
|
67
|
+
:long => "--identity-file IDENTITY_FILE",
|
|
68
|
+
:description => "The SSH identity file used for authentication"
|
|
69
|
+
|
|
70
|
+
option :no_host_key_verify,
|
|
71
|
+
:long => "--no-host-key-verify",
|
|
72
|
+
:description => "Disable host key verification",
|
|
73
|
+
:boolean => true,
|
|
74
|
+
:default => false
|
|
75
|
+
|
|
76
|
+
def session
|
|
77
|
+
ssh_error_handler = Proc.new do |server|
|
|
78
|
+
if config[:manual]
|
|
79
|
+
node_name = server.host
|
|
80
|
+
else
|
|
81
|
+
@action_nodes.each do |n|
|
|
82
|
+
node_name = n if format_for_display(n)[config[:attribute]] == server.host
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
ui.warn "Failed to connect to #{node_name} -- #{$!.class.name}: #{$!.message}"
|
|
86
|
+
$!.backtrace.each { |l| Chef::Log.debug(l) }
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
@session ||= Net::SSH::Multi.start(:concurrent_connections => config[:concurrency], :on_error => ssh_error_handler)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def configure_session
|
|
93
|
+
list = case config[:manual]
|
|
94
|
+
when true
|
|
95
|
+
@name_args[0].split(" ")
|
|
96
|
+
when false
|
|
97
|
+
r = Array.new
|
|
98
|
+
q = Chef::Search::Query.new
|
|
99
|
+
@action_nodes = q.search(:node, @name_args[0])[0]
|
|
100
|
+
@action_nodes.each do |item|
|
|
101
|
+
i = format_for_display(item)[config[:attribute]]
|
|
102
|
+
r.push(i) unless i.nil?
|
|
103
|
+
end
|
|
104
|
+
r
|
|
105
|
+
end
|
|
106
|
+
(ui.fatal("No nodes returned from search!"); exit 10) if list.length == 0
|
|
107
|
+
session_from_list(list)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def session_from_list(list)
|
|
111
|
+
list.each do |item|
|
|
112
|
+
Chef::Log.debug("Adding #{item}")
|
|
113
|
+
|
|
114
|
+
hostspec = config[:ssh_user] ? "#{config[:ssh_user]}@#{item}" : item
|
|
115
|
+
session_opts = {}
|
|
116
|
+
session_opts[:keys] = File.expand_path(config[:identity_file]) if config[:identity_file]
|
|
117
|
+
session_opts[:password] = config[:ssh_password] if config[:ssh_password]
|
|
118
|
+
session_opts[:logger] = Chef::Log.logger if Chef::Log.level == :debug
|
|
119
|
+
|
|
120
|
+
if config[:no_host_key_verify]
|
|
121
|
+
session_opts[:paranoid] = false
|
|
122
|
+
session_opts[:user_known_hosts_file] = "/dev/null"
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
session.use(hostspec, session_opts)
|
|
126
|
+
|
|
127
|
+
@longest = item.length if item.length > @longest
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
session
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def fixup_sudo(command)
|
|
134
|
+
command.sub(/^sudo/, 'sudo -p \'knife sudo password: \'')
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def print_data(host, data)
|
|
138
|
+
if data =~ /\n/
|
|
139
|
+
data.split(/\n/).each { |d| print_data(host, d) }
|
|
140
|
+
else
|
|
141
|
+
padding = @longest - host.length
|
|
142
|
+
print ui.color(host, :cyan)
|
|
143
|
+
padding.downto(0) { print " " }
|
|
144
|
+
puts data
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def ssh_command(command, subsession=nil)
|
|
149
|
+
subsession ||= session
|
|
150
|
+
command = fixup_sudo(command)
|
|
151
|
+
subsession.open_channel do |ch|
|
|
152
|
+
ch.request_pty
|
|
153
|
+
ch.exec command do |ch, success|
|
|
154
|
+
raise ArgumentError, "Cannot execute #{command}" unless success
|
|
155
|
+
ch.on_data do |ichannel, data|
|
|
156
|
+
print_data(ichannel[:host], data)
|
|
157
|
+
if data =~ /^knife sudo password: /
|
|
158
|
+
ichannel.send_data("#{get_password}\n")
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
session.loop
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def get_password
|
|
167
|
+
@password ||= ui.ask("Enter your password: ") { |q| q.echo = false }
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# Present the prompt and read a single line from the console. It also
|
|
171
|
+
# detects ^D and returns "exit" in that case. Adds the input to the
|
|
172
|
+
# history, unless the input is empty. Loops repeatedly until a non-empty
|
|
173
|
+
# line is input.
|
|
174
|
+
def read_line
|
|
175
|
+
loop do
|
|
176
|
+
command = reader.readline("#{ui.color('knife-ssh>', :bold)} ", true)
|
|
177
|
+
|
|
178
|
+
if command.nil?
|
|
179
|
+
command = "exit"
|
|
180
|
+
puts(command)
|
|
181
|
+
else
|
|
182
|
+
command.strip!
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
unless command.empty?
|
|
186
|
+
return command
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def reader
|
|
192
|
+
Readline
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def interactive
|
|
196
|
+
puts "Connected to #{ui.list(session.servers_for.collect { |s| ui.color(s.host, :cyan) }, :inline, " and ")}"
|
|
197
|
+
puts
|
|
198
|
+
puts "To run a command on a list of servers, do:"
|
|
199
|
+
puts " on SERVER1 SERVER2 SERVER3; COMMAND"
|
|
200
|
+
puts " Example: on latte foamy; echo foobar"
|
|
201
|
+
puts
|
|
202
|
+
puts "To exit interactive mode, use 'quit!'"
|
|
203
|
+
puts
|
|
204
|
+
while 1
|
|
205
|
+
command = read_line
|
|
206
|
+
case command
|
|
207
|
+
when 'quit!'
|
|
208
|
+
puts 'Bye!'
|
|
209
|
+
break
|
|
210
|
+
when /^on (.+?); (.+)$/
|
|
211
|
+
raw_list = $1.split(" ")
|
|
212
|
+
server_list = Array.new
|
|
213
|
+
session.servers.each do |session_server|
|
|
214
|
+
server_list << session_server if raw_list.include?(session_server.host)
|
|
215
|
+
end
|
|
216
|
+
command = $2
|
|
217
|
+
ssh_command(command, session.on(*server_list))
|
|
218
|
+
else
|
|
219
|
+
ssh_command(command)
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def screen
|
|
225
|
+
tf = Tempfile.new("knife-ssh-screen")
|
|
226
|
+
if File.exist? "#{ENV["HOME"]}/.screenrc"
|
|
227
|
+
tf.puts("source #{ENV["HOME"]}/.screenrc")
|
|
228
|
+
end
|
|
229
|
+
tf.puts("caption always '%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<'")
|
|
230
|
+
tf.puts("hardstatus alwayslastline 'knife ssh #{@name_args[0]}'")
|
|
231
|
+
window = 0
|
|
232
|
+
session.servers_for.each do |server|
|
|
233
|
+
tf.print("screen -t \"#{server.host}\" #{window} ssh ")
|
|
234
|
+
server.user ? tf.puts("#{server.user}@#{server.host}") : tf.puts(server.host)
|
|
235
|
+
window += 1
|
|
236
|
+
end
|
|
237
|
+
tf.close
|
|
238
|
+
exec("screen -c #{tf.path}")
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def tmux
|
|
242
|
+
ssh_dest = lambda do |server|
|
|
243
|
+
prefix = server.user ? "#{server.user}@" : ""
|
|
244
|
+
"'ssh #{prefix}#{server.host}'"
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
new_window_cmds = lambda do
|
|
248
|
+
if session.servers_for.size > 1
|
|
249
|
+
[""] + session.servers_for[1..-1].map do |server|
|
|
250
|
+
"new-window -a -n '#{server.host}' #{ssh_dest.call(server)}"
|
|
251
|
+
end
|
|
252
|
+
else
|
|
253
|
+
[]
|
|
254
|
+
end.join(" \\; ")
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
tmux_name = "'knife ssh #{@name_args[0]}'"
|
|
258
|
+
begin
|
|
259
|
+
server = session.servers_for.first
|
|
260
|
+
cmd = ["tmux new-session -d -s #{tmux_name}",
|
|
261
|
+
"-n '#{server.host}'", ssh_dest.call(server),
|
|
262
|
+
new_window_cmds.call].join(" ")
|
|
263
|
+
Chef::Mixin::Command.run_command(:command => cmd)
|
|
264
|
+
exec("tmux attach-session -t #{tmux_name}")
|
|
265
|
+
rescue Chef::Exceptions::Exec
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def macterm
|
|
270
|
+
begin
|
|
271
|
+
require 'appscript'
|
|
272
|
+
rescue LoadError
|
|
273
|
+
STDERR.puts "you need the rb-appscript gem to use knife ssh macterm. `(sudo) gem install rb-appscript` to install"
|
|
274
|
+
raise
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
Appscript.app("/Applications/Utilities/Terminal.app").windows.first.activate
|
|
278
|
+
Appscript.app("System Events").application_processes["Terminal.app"].keystroke("n", :using=>:command_down)
|
|
279
|
+
term = Appscript.app('Terminal')
|
|
280
|
+
window = term.windows.first.get
|
|
281
|
+
|
|
282
|
+
(session.servers_for.size - 1).times do |i|
|
|
283
|
+
window.activate
|
|
284
|
+
Appscript.app("System Events").application_processes["Terminal.app"].keystroke("t", :using=>:command_down)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
session.servers_for.each_with_index do |server, tab_number|
|
|
288
|
+
cmd = "unset PROMPT_COMMAND; echo -e \"\\033]0;#{server.host}\\007\"; ssh #{server.user ? "#{server.user}@#{server.host}" : server.host}"
|
|
289
|
+
Appscript.app('Terminal').do_script(cmd, :in => window.tabs[tab_number + 1].get)
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def run
|
|
294
|
+
|
|
295
|
+
@longest = 0
|
|
296
|
+
|
|
297
|
+
configure_session
|
|
298
|
+
|
|
299
|
+
case @name_args[1]
|
|
300
|
+
when "interactive"
|
|
301
|
+
interactive
|
|
302
|
+
when "screen"
|
|
303
|
+
screen
|
|
304
|
+
when "tmux"
|
|
305
|
+
tmux
|
|
306
|
+
when "macterm"
|
|
307
|
+
macterm
|
|
308
|
+
else
|
|
309
|
+
ssh_command(@name_args[1..-1].join(" "))
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
session.close
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|