mbailey-chef 0.9.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +201 -0
- data/README.rdoc +172 -0
- data/bin/chef-client +26 -0
- data/bin/chef-solo +25 -0
- data/bin/knife +26 -0
- data/bin/shef +34 -0
- data/distro/README +2 -0
- data/distro/common/man/man1/chef-indexer.1 +42 -0
- data/distro/common/man/man1/chef-server-webui.1 +106 -0
- data/distro/common/man/man1/chef-server.1 +107 -0
- data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
- data/distro/common/man/man1/chef-solr.1 +55 -0
- data/distro/common/man/man8/chef-client.8 +63 -0
- data/distro/common/man/man8/chef-solo.8 +57 -0
- data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
- data/distro/common/man/man8/knife.8 +1349 -0
- data/distro/common/man/man8/shef.8 +45 -0
- data/distro/common/markdown/README +3 -0
- data/distro/common/markdown/knife.mkd +832 -0
- data/distro/debian/etc/default/chef-client +4 -0
- data/distro/debian/etc/default/chef-server +9 -0
- data/distro/debian/etc/default/chef-server-webui +9 -0
- data/distro/debian/etc/default/chef-solr +7 -0
- data/distro/debian/etc/default/chef-solr-indexer +7 -0
- data/distro/debian/etc/init/chef-client.conf +17 -0
- data/distro/debian/etc/init/chef-server-webui.conf +17 -0
- data/distro/debian/etc/init/chef-server.conf +17 -0
- data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
- data/distro/debian/etc/init/chef-solr.conf +17 -0
- data/distro/debian/etc/init.d/chef-client +175 -0
- data/distro/debian/etc/init.d/chef-server +122 -0
- data/distro/debian/etc/init.d/chef-server-webui +123 -0
- data/distro/debian/etc/init.d/chef-solr +177 -0
- data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
- data/distro/redhat/etc/init.d/chef-client +106 -0
- data/distro/redhat/etc/init.d/chef-server +112 -0
- data/distro/redhat/etc/init.d/chef-server-webui +112 -0
- data/distro/redhat/etc/init.d/chef-solr +104 -0
- data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
- data/distro/redhat/etc/logrotate.d/chef-client +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
- data/distro/redhat/etc/sysconfig/chef-client +15 -0
- data/distro/redhat/etc/sysconfig/chef-server +14 -0
- data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
- data/distro/redhat/etc/sysconfig/chef-solr +8 -0
- data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
- data/lib/chef/api_client.rb +264 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +246 -0
- data/lib/chef/application/knife.rb +171 -0
- data/lib/chef/application/solo.rb +215 -0
- data/lib/chef/application.rb +127 -0
- data/lib/chef/applications.rb +4 -0
- data/lib/chef/certificate.rb +194 -0
- data/lib/chef/checksum.rb +182 -0
- data/lib/chef/checksum_cache.rb +173 -0
- data/lib/chef/client.rb +304 -0
- data/lib/chef/config.rb +240 -0
- data/lib/chef/cookbook/cookbook_collection.rb +44 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +54 -0
- data/lib/chef/cookbook/file_vendor.rb +48 -0
- data/lib/chef/cookbook/metadata/version.rb +87 -0
- data/lib/chef/cookbook/metadata.rb +500 -0
- data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
- data/lib/chef/cookbook/syntax_check.rb +136 -0
- data/lib/chef/cookbook_loader.rb +227 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
- data/lib/chef/cookbook_uploader.rb +103 -0
- data/lib/chef/cookbook_version.rb +930 -0
- data/lib/chef/couchdb.rb +239 -0
- data/lib/chef/daemon.rb +172 -0
- data/lib/chef/data_bag.rb +215 -0
- data/lib/chef/data_bag_item.rb +228 -0
- data/lib/chef/exceptions.rb +66 -0
- data/lib/chef/file_access_control.rb +140 -0
- data/lib/chef/file_cache.rb +218 -0
- data/lib/chef/handler/json_file.rb +58 -0
- data/lib/chef/handler.rb +206 -0
- data/lib/chef/index_queue/amqp_client.rb +113 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +76 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +44 -0
- data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
- data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +43 -0
- data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
- data/lib/chef/knife/bootstrap.rb +181 -0
- data/lib/chef/knife/client_bulk_delete.rb +40 -0
- data/lib/chef/knife/client_create.rb +70 -0
- data/lib/chef/knife/client_delete.rb +45 -0
- data/lib/chef/knife/client_edit.rb +45 -0
- data/lib/chef/knife/client_list.rb +40 -0
- data/lib/chef/knife/client_reregister.rb +56 -0
- data/lib/chef/knife/client_show.rb +50 -0
- data/lib/chef/knife/configure.rb +140 -0
- data/lib/chef/knife/configure_client.rb +52 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +58 -0
- data/lib/chef/knife/cookbook_create.rb +209 -0
- data/lib/chef/knife/cookbook_delete.rb +143 -0
- data/lib/chef/knife/cookbook_download.rb +130 -0
- data/lib/chef/knife/cookbook_list.rb +41 -0
- data/lib/chef/knife/cookbook_metadata.rb +82 -0
- data/lib/chef/knife/cookbook_metadata_from_file.rb +40 -0
- data/lib/chef/knife/cookbook_show.rb +98 -0
- data/lib/chef/knife/cookbook_site_download.rb +58 -0
- data/lib/chef/knife/cookbook_site_list.rb +56 -0
- data/lib/chef/knife/cookbook_site_search.rb +51 -0
- data/lib/chef/knife/cookbook_site_share.rb +109 -0
- data/lib/chef/knife/cookbook_site_show.rb +57 -0
- data/lib/chef/knife/cookbook_site_unshare.rb +52 -0
- data/lib/chef/knife/cookbook_site_vendor.rb +133 -0
- data/lib/chef/knife/cookbook_test.rb +82 -0
- data/lib/chef/knife/cookbook_upload.rb +95 -0
- data/lib/chef/knife/data_bag_create.rb +59 -0
- data/lib/chef/knife/data_bag_delete.rb +48 -0
- data/lib/chef/knife/data_bag_edit.rb +50 -0
- data/lib/chef/knife/data_bag_from_file.rb +44 -0
- data/lib/chef/knife/data_bag_list.rb +43 -0
- data/lib/chef/knife/data_bag_show.rb +41 -0
- data/lib/chef/knife/ec2_instance_data.rb +46 -0
- data/lib/chef/knife/ec2_server_create.rb +216 -0
- data/lib/chef/knife/ec2_server_delete.rb +90 -0
- data/lib/chef/knife/ec2_server_list.rb +88 -0
- data/lib/chef/knife/exec.rb +52 -0
- data/lib/chef/knife/index_rebuild.rb +51 -0
- data/lib/chef/knife/node_bulk_delete.rb +43 -0
- data/lib/chef/knife/node_create.rb +47 -0
- data/lib/chef/knife/node_delete.rb +44 -0
- data/lib/chef/knife/node_edit.rb +44 -0
- data/lib/chef/knife/node_from_file.rb +42 -0
- data/lib/chef/knife/node_list.rb +41 -0
- data/lib/chef/knife/node_run_list_add.rb +64 -0
- data/lib/chef/knife/node_run_list_remove.rb +45 -0
- data/lib/chef/knife/node_show.rb +54 -0
- data/lib/chef/knife/rackspace_server_create.rb +156 -0
- data/lib/chef/knife/rackspace_server_delete.rb +57 -0
- data/lib/chef/knife/rackspace_server_list.rb +59 -0
- data/lib/chef/knife/recipe_list.rb +32 -0
- data/lib/chef/knife/role_bulk_delete.rb +44 -0
- data/lib/chef/knife/role_create.rb +52 -0
- data/lib/chef/knife/role_delete.rb +44 -0
- data/lib/chef/knife/role_edit.rb +45 -0
- data/lib/chef/knife/role_from_file.rb +46 -0
- data/lib/chef/knife/role_list.rb +40 -0
- data/lib/chef/knife/role_show.rb +51 -0
- data/lib/chef/knife/search.rb +94 -0
- data/lib/chef/knife/slicehost_images_list.rb +53 -0
- data/lib/chef/knife/slicehost_server_create.rb +103 -0
- data/lib/chef/knife/slicehost_server_delete.rb +61 -0
- data/lib/chef/knife/slicehost_server_list.rb +64 -0
- data/lib/chef/knife/ssh.rb +328 -0
- data/lib/chef/knife/status.rb +87 -0
- data/lib/chef/knife/terremark_server_create.rb +152 -0
- data/lib/chef/knife/terremark_server_delete.rb +87 -0
- data/lib/chef/knife/terremark_server_list.rb +77 -0
- data/lib/chef/knife/windows_bootstrap.rb +154 -0
- data/lib/chef/knife.rb +522 -0
- data/lib/chef/log.rb +61 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command/unix.rb +215 -0
- data/lib/chef/mixin/command/windows.rb +72 -0
- data/lib/chef/mixin/command.rb +220 -0
- data/lib/chef/mixin/convert_to_class_name.rb +63 -0
- data/lib/chef/mixin/create_path.rb +56 -0
- data/lib/chef/mixin/deep_merge.rb +225 -0
- data/lib/chef/mixin/deprecation.rb +65 -0
- data/lib/chef/mixin/find_preferred_file.rb +92 -0
- data/lib/chef/mixin/from_file.rb +50 -0
- data/lib/chef/mixin/language.rb +156 -0
- data/lib/chef/mixin/language_include_attribute.rb +61 -0
- data/lib/chef/mixin/language_include_recipe.rb +52 -0
- data/lib/chef/mixin/params_validate.rb +225 -0
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
- data/lib/chef/mixin/shell_out.rb +38 -0
- data/lib/chef/mixin/template.rb +95 -0
- data/lib/chef/mixin/xml_escape.rb +140 -0
- data/lib/chef/mixins.rb +16 -0
- data/lib/chef/monkey_patches/dir.rb +36 -0
- data/lib/chef/monkey_patches/string.rb +28 -0
- data/lib/chef/monkey_patches/tempfile.rb +64 -0
- data/lib/chef/node/attribute.rb +465 -0
- data/lib/chef/node.rb +601 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +371 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +100 -0
- data/lib/chef/provider/cron/solaris.rb +195 -0
- data/lib/chef/provider/cron.rb +186 -0
- data/lib/chef/provider/deploy/revision.rb +73 -0
- data/lib/chef/provider/deploy/timestamped.rb +33 -0
- data/lib/chef/provider/deploy.rb +319 -0
- data/lib/chef/provider/directory.rb +72 -0
- data/lib/chef/provider/env/windows.rb +75 -0
- data/lib/chef/provider/env.rb +152 -0
- data/lib/chef/provider/erl_call.rb +72 -0
- data/lib/chef/provider/execute.rb +58 -0
- data/lib/chef/provider/file.rb +213 -0
- data/lib/chef/provider/git.rb +211 -0
- data/lib/chef/provider/group/dscl.rb +121 -0
- data/lib/chef/provider/group/gpasswd.rb +53 -0
- data/lib/chef/provider/group/groupadd.rb +78 -0
- data/lib/chef/provider/group/pw.rb +84 -0
- data/lib/chef/provider/group/usermod.rb +57 -0
- data/lib/chef/provider/group/windows.rb +79 -0
- data/lib/chef/provider/group.rb +133 -0
- data/lib/chef/provider/http_request.rb +122 -0
- data/lib/chef/provider/ifconfig.rb +132 -0
- data/lib/chef/provider/link.rb +161 -0
- data/lib/chef/provider/log.rb +54 -0
- data/lib/chef/provider/mdadm.rb +91 -0
- data/lib/chef/provider/mount/mount.rb +232 -0
- data/lib/chef/provider/mount/windows.rb +80 -0
- data/lib/chef/provider/mount.rb +117 -0
- data/lib/chef/provider/ohai.rb +41 -0
- data/lib/chef/provider/package/apt.rb +110 -0
- data/lib/chef/provider/package/dpkg.rb +112 -0
- data/lib/chef/provider/package/easy_install.rb +114 -0
- data/lib/chef/provider/package/freebsd.rb +123 -0
- data/lib/chef/provider/package/macports.rb +105 -0
- data/lib/chef/provider/package/pacman.rb +101 -0
- data/lib/chef/provider/package/portage.rb +124 -0
- data/lib/chef/provider/package/rpm.rb +101 -0
- data/lib/chef/provider/package/rubygems.rb +462 -0
- data/lib/chef/provider/package/solaris.rb +127 -0
- data/lib/chef/provider/package/yum-dump.py +128 -0
- data/lib/chef/provider/package/yum.rb +222 -0
- data/lib/chef/provider/package/zypper.rb +133 -0
- data/lib/chef/provider/package.rb +160 -0
- data/lib/chef/provider/remote_directory.rb +140 -0
- data/lib/chef/provider/remote_file.rb +120 -0
- data/lib/chef/provider/route.rb +195 -0
- data/lib/chef/provider/ruby_block.rb +33 -0
- data/lib/chef/provider/script.rb +55 -0
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/debian.rb +105 -0
- data/lib/chef/provider/service/freebsd.rb +156 -0
- data/lib/chef/provider/service/gentoo.rb +54 -0
- data/lib/chef/provider/service/init.rb +71 -0
- data/lib/chef/provider/service/redhat.rb +60 -0
- data/lib/chef/provider/service/simple.rb +118 -0
- data/lib/chef/provider/service/solaris.rb +85 -0
- data/lib/chef/provider/service/upstart.rb +192 -0
- data/lib/chef/provider/service/windows.rb +129 -0
- data/lib/chef/provider/service.rb +128 -0
- data/lib/chef/provider/subversion.rb +159 -0
- data/lib/chef/provider/template.rb +105 -0
- data/lib/chef/provider/user/dscl.rb +280 -0
- data/lib/chef/provider/user/pw.rb +113 -0
- data/lib/chef/provider/user/useradd.rb +137 -0
- data/lib/chef/provider/user/windows.rb +124 -0
- data/lib/chef/provider/user.rb +187 -0
- data/lib/chef/provider.rb +124 -0
- data/lib/chef/providers.rb +91 -0
- data/lib/chef/recipe.rb +130 -0
- data/lib/chef/resource/apt_package.rb +34 -0
- data/lib/chef/resource/bash.rb +33 -0
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/cookbook_file.rb +45 -0
- data/lib/chef/resource/cron.rb +188 -0
- data/lib/chef/resource/csh.rb +33 -0
- data/lib/chef/resource/deploy.rb +371 -0
- data/lib/chef/resource/deploy_revision.rb +35 -0
- data/lib/chef/resource/directory.rb +76 -0
- data/lib/chef/resource/dpkg_package.rb +34 -0
- data/lib/chef/resource/easy_install_package.rb +41 -0
- data/lib/chef/resource/env.rb +58 -0
- data/lib/chef/resource/erl_call.rb +83 -0
- data/lib/chef/resource/execute.rb +127 -0
- data/lib/chef/resource/file.rb +92 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/gem_package.rb +49 -0
- data/lib/chef/resource/git.rb +36 -0
- data/lib/chef/resource/group.rb +70 -0
- data/lib/chef/resource/http_request.rb +61 -0
- data/lib/chef/resource/ifconfig.rb +134 -0
- data/lib/chef/resource/link.rb +78 -0
- data/lib/chef/resource/log.rb +62 -0
- data/lib/chef/resource/macports_package.rb +29 -0
- data/lib/chef/resource/mdadm.rb +82 -0
- data/lib/chef/resource/mount.rb +135 -0
- data/lib/chef/resource/ohai.rb +40 -0
- data/lib/chef/resource/package.rb +80 -0
- data/lib/chef/resource/pacman_package.rb +33 -0
- data/lib/chef/resource/perl.rb +33 -0
- data/lib/chef/resource/portage_package.rb +33 -0
- data/lib/chef/resource/python.rb +33 -0
- data/lib/chef/resource/remote_directory.rb +109 -0
- data/lib/chef/resource/remote_file.rb +83 -0
- data/lib/chef/resource/route.rb +135 -0
- data/lib/chef/resource/rpm_package.rb +34 -0
- data/lib/chef/resource/ruby.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +40 -0
- data/lib/chef/resource/scm.rb +146 -0
- data/lib/chef/resource/script.rb +60 -0
- data/lib/chef/resource/service.rb +160 -0
- data/lib/chef/resource/solaris_package.rb +36 -0
- data/lib/chef/resource/subversion.rb +36 -0
- data/lib/chef/resource/template.rb +69 -0
- data/lib/chef/resource/timestamped_deploy.rb +31 -0
- data/lib/chef/resource/user.rb +130 -0
- data/lib/chef/resource/yum_package.rb +43 -0
- data/lib/chef/resource.rb +523 -0
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/resource_collection.rb +217 -0
- data/lib/chef/resource_definition.rb +67 -0
- data/lib/chef/resource_definition_list.rb +38 -0
- data/lib/chef/resources.rb +64 -0
- data/lib/chef/rest/auth_credentials.rb +78 -0
- data/lib/chef/rest/cookie_jar.rb +31 -0
- data/lib/chef/rest/rest_request.rb +188 -0
- data/lib/chef/rest.rb +394 -0
- data/lib/chef/role.rb +287 -0
- data/lib/chef/run_context.rb +110 -0
- data/lib/chef/run_list/run_list_expansion.rb +172 -0
- data/lib/chef/run_list/run_list_item.rb +78 -0
- data/lib/chef/run_list.rb +150 -0
- data/lib/chef/run_status.rb +121 -0
- data/lib/chef/runner.rb +107 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/search/query.rb +60 -0
- data/lib/chef/shef/ext.rb +568 -0
- data/lib/chef/shef/model_wrapper.rb +120 -0
- data/lib/chef/shef/shef_rest.rb +28 -0
- data/lib/chef/shef/shef_session.rb +271 -0
- data/lib/chef/shef.rb +325 -0
- data/lib/chef/shell_out.rb +413 -0
- data/lib/chef/streaming_cookbook_uploader.rb +201 -0
- data/lib/chef/tasks/chef_repo.rake +256 -0
- data/lib/chef/util/file_edit.rb +122 -0
- data/lib/chef/util/windows/net_group.rb +101 -0
- data/lib/chef/util/windows/net_use.rb +121 -0
- data/lib/chef/util/windows/net_user.rb +198 -0
- data/lib/chef/util/windows/volume.rb +59 -0
- data/lib/chef/util/windows.rb +56 -0
- data/lib/chef/version.rb +21 -0
- data/lib/chef/webui_user.rb +231 -0
- data/lib/chef.rb +39 -0
- metadata +533 -0
|
@@ -0,0 +1,152 @@
|
|
|
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
|
+
require 'json'
|
|
21
|
+
require 'tempfile'
|
|
22
|
+
|
|
23
|
+
class Chef
|
|
24
|
+
class Knife
|
|
25
|
+
class TerremarkServerCreate < Knife
|
|
26
|
+
|
|
27
|
+
banner "knife terremark server create NAME [RUN LIST...] (options)"
|
|
28
|
+
|
|
29
|
+
option :terremark_password,
|
|
30
|
+
:short => "-K PASSWORD",
|
|
31
|
+
:long => "--terremark-password PASSWORD",
|
|
32
|
+
:description => "Your terremark password",
|
|
33
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:terremark_password] = key }
|
|
34
|
+
|
|
35
|
+
option :terremark_username,
|
|
36
|
+
:short => "-A USERNAME",
|
|
37
|
+
:long => "--terremark-username USERNAME",
|
|
38
|
+
:description => "Your terremark username",
|
|
39
|
+
:proc => Proc.new { |username| Chef::Config[:knife][:terremark_username] = username }
|
|
40
|
+
|
|
41
|
+
option :terremark_service,
|
|
42
|
+
:short => "-S SERVICE",
|
|
43
|
+
:long => "--terremark-service SERVICE",
|
|
44
|
+
:description => "Your terremark service name",
|
|
45
|
+
:proc => Proc.new { |service| Chef::Config[:knife][:terremark_service] = service }
|
|
46
|
+
|
|
47
|
+
def h
|
|
48
|
+
@highline ||= HighLine.new
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def run
|
|
52
|
+
require 'fog'
|
|
53
|
+
require 'highline'
|
|
54
|
+
require 'net/ssh/multi'
|
|
55
|
+
require 'readline'
|
|
56
|
+
require 'net/scp'
|
|
57
|
+
|
|
58
|
+
server_name = @name_args[0]
|
|
59
|
+
|
|
60
|
+
terremark = Fog::Terremark.new(
|
|
61
|
+
:terremark_username => Chef::Config[:knife][:terremark_username],
|
|
62
|
+
:terremark_password => Chef::Config[:knife][:terremark_password],
|
|
63
|
+
:terremark_service => Chef::Config[:knife][:terremark_service] || :vcloud
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
$stdout.sync = true
|
|
67
|
+
|
|
68
|
+
puts "Instantiating vApp #{h.color(server_name, :bold)}"
|
|
69
|
+
vapp_id = terremark.instantiate_vapp_template(server_name).body['href'].split('/').last
|
|
70
|
+
|
|
71
|
+
deploy_task_id = terremark.deploy_vapp(vapp_id).body['href'].split('/').last
|
|
72
|
+
print "Waiting for deploy task [#{h.color(deploy_task_id, :bold)}]"
|
|
73
|
+
terremark.tasks.get(deploy_task_id).wait_for { print "."; ready? }
|
|
74
|
+
print "\n"
|
|
75
|
+
|
|
76
|
+
power_on_task_id = terremark.power_on(vapp_id).body['href'].split('/').last
|
|
77
|
+
print "Waiting for power on task [#{h.color(power_on_task_id, :bold)}]"
|
|
78
|
+
terremark.tasks.get(power_on_task_id).wait_for { print "."; ready? }
|
|
79
|
+
print "\n"
|
|
80
|
+
|
|
81
|
+
private_ip = terremark.get_vapp(vapp_id).body['IpAddress']
|
|
82
|
+
ssh_internet_service = terremark.create_internet_service(terremark.default_vdc_id, 'SSH', 'TCP', 22).body
|
|
83
|
+
ssh_internet_service_id = ssh_internet_service['Id']
|
|
84
|
+
public_ip = ssh_internet_service['PublicIpAddress']['Name']
|
|
85
|
+
public_ip_id = ssh_internet_service['PublicIpAddress']['Id']
|
|
86
|
+
ssh_node_service_id = terremark.add_node_service(ssh_internet_service_id, private_ip, 'SSH', 22).body['Id']
|
|
87
|
+
|
|
88
|
+
puts "\nBootstrapping #{h.color(server_name, :bold)}..."
|
|
89
|
+
password = terremark.get_vapp_template(12).body['Description'].scan(/\npassword: (.*)\n/).first.first
|
|
90
|
+
|
|
91
|
+
command = <<EOH
|
|
92
|
+
bash -c '
|
|
93
|
+
echo nameserver 208.67.222.222 > /etc/resolv.conf
|
|
94
|
+
echo nameserver 208.67.220.220 >> /etc/resolv.conf
|
|
95
|
+
|
|
96
|
+
if [ ! -f /usr/bin/chef-client ]; then
|
|
97
|
+
apt-get update
|
|
98
|
+
apt-get install -y ruby ruby1.8-dev build-essential wget libruby-extras libruby1.8-extras
|
|
99
|
+
cd /tmp
|
|
100
|
+
wget http://rubyforge.org/frs/download.php/69365/rubygems-1.3.6.tgz
|
|
101
|
+
tar xvf rubygems-1.3.6.tgz
|
|
102
|
+
cd rubygems-1.3.6
|
|
103
|
+
ruby setup.rb
|
|
104
|
+
cp /usr/bin/gem1.8 /usr/bin/gem
|
|
105
|
+
gem install chef ohai --no-rdoc --no-ri --verbose
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
mkdir -p /etc/chef
|
|
109
|
+
|
|
110
|
+
(
|
|
111
|
+
cat <<'EOP'
|
|
112
|
+
#{IO.read(Chef::Config[:validation_key])}
|
|
113
|
+
EOP
|
|
114
|
+
) > /etc/chef/validation.pem
|
|
115
|
+
|
|
116
|
+
(
|
|
117
|
+
cat <<'EOP'
|
|
118
|
+
log_level :info
|
|
119
|
+
log_location STDOUT
|
|
120
|
+
chef_server_url "#{Chef::Config[:chef_server_url]}"
|
|
121
|
+
validation_client_name "#{Chef::Config[:validation_client_name]}"
|
|
122
|
+
EOP
|
|
123
|
+
) > /etc/chef/client.rb
|
|
124
|
+
|
|
125
|
+
(
|
|
126
|
+
cat <<'EOP'
|
|
127
|
+
#{{ "run_list" => @name_args[1..-1] }.to_json}
|
|
128
|
+
EOP
|
|
129
|
+
) > /etc/chef/first-boot.json
|
|
130
|
+
|
|
131
|
+
/usr/bin/chef-client -j /etc/chef/first-boot.json'
|
|
132
|
+
EOH
|
|
133
|
+
|
|
134
|
+
begin
|
|
135
|
+
ssh = Chef::Knife::Ssh.new
|
|
136
|
+
ssh.name_args = [ public_ip, "sudo #{command}" ]
|
|
137
|
+
ssh.config[:ssh_user] = "vcloud"
|
|
138
|
+
ssh.config[:manual] = true
|
|
139
|
+
ssh.config[:password] = password
|
|
140
|
+
ssh.password = password
|
|
141
|
+
ssh.run
|
|
142
|
+
rescue Errno::ETIMEDOUT
|
|
143
|
+
puts "Timed out on bootstrap, re-trying. Hit CTRL-C to abort."
|
|
144
|
+
puts "You probably need to log in to Terremark and powercycle #{h.color(@name_args[0], :bold)}"
|
|
145
|
+
retry
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
require 'json'
|
|
21
|
+
|
|
22
|
+
class Chef
|
|
23
|
+
class Knife
|
|
24
|
+
class TerremarkServerDelete < Knife
|
|
25
|
+
|
|
26
|
+
banner "knife terremark server delete SERVER (options)"
|
|
27
|
+
|
|
28
|
+
def h
|
|
29
|
+
@highline ||= HighLine.new
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def run
|
|
33
|
+
require 'fog'
|
|
34
|
+
require 'highline'
|
|
35
|
+
|
|
36
|
+
terremark = Fog::Terremark.new(
|
|
37
|
+
:terremark_username => Chef::Config[:knife][:terremark_username],
|
|
38
|
+
:terremark_password => Chef::Config[:knife][:terremark_password],
|
|
39
|
+
:terremark_service => Chef::Config[:knife][:terremark_service] || :vcloud
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
$stdout.sync = true
|
|
43
|
+
|
|
44
|
+
vapp_id = terremark.servers.detect {|server| server.name == @name_args[0]}.id
|
|
45
|
+
confirm("Do you really want to delete server ID #{vapp_id} named #{@name_args[0]}")
|
|
46
|
+
|
|
47
|
+
puts "Cleaning up internet services..."
|
|
48
|
+
private_ip = terremark.servers.get(vapp_id).ip_address
|
|
49
|
+
internet_services = terremark.get_internet_services(terremark.default_vdc_id).body['InternetServices']
|
|
50
|
+
public_ip_usage = {}
|
|
51
|
+
internet_services.each do |internet_service|
|
|
52
|
+
public_ip_address = internet_service['PublicIpAddress']['Name']
|
|
53
|
+
public_ip_usage[public_ip_address] ||= []
|
|
54
|
+
public_ip_usage[public_ip_address] << internet_service['Id']
|
|
55
|
+
end
|
|
56
|
+
internet_services.each do |internet_service|
|
|
57
|
+
node_services = terremark.get_node_services(internet_service['Id']).body['NodeServices']
|
|
58
|
+
node_services.delete_if do |node_service|
|
|
59
|
+
if node_service['IpAddress'] == private_ip
|
|
60
|
+
terremark.delete_node_service(node_service['Id'])
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
if node_services.empty?
|
|
64
|
+
terremark.delete_internet_service(internet_service['Id'])
|
|
65
|
+
public_ip_usage.each_value {|internet_services| internet_services.delete(internet_service['Id'])}
|
|
66
|
+
if public_ip_usage[internet_service['PublicIpAddress']['Name']].empty?
|
|
67
|
+
terremark.delete_public_ip(internet_service['PublicIpAddress']['Id'])
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
power_off_task_id = terremark.power_off(vapp_id).body['href'].split('/').last
|
|
73
|
+
print "Waiting for power off task [#{h.color(power_off_task_id, :bold)}]"
|
|
74
|
+
terremark.tasks.get(power_off_task_id).wait_for { print '.'; ready? }
|
|
75
|
+
print "\n"
|
|
76
|
+
|
|
77
|
+
print "Deleting vApp #{h.color(vapp_id, :bold)}"
|
|
78
|
+
delete_vapp_task_id = terremark.delete_vapp(vapp_id).headers['Location'].split('/').last
|
|
79
|
+
terremark.tasks.get(delete_vapp_task_id).wait_for { print '.'; ready? }
|
|
80
|
+
print "\n"
|
|
81
|
+
|
|
82
|
+
Chef::Log.warn("Deleted server #{@name_args[0]}")
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
@@ -0,0 +1,77 @@
|
|
|
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
|
+
require 'json'
|
|
21
|
+
require 'tempfile'
|
|
22
|
+
|
|
23
|
+
class Chef
|
|
24
|
+
class Knife
|
|
25
|
+
class TerremarkServerList < Knife
|
|
26
|
+
|
|
27
|
+
banner "knife terremark server list (options)"
|
|
28
|
+
|
|
29
|
+
option :terremark_password,
|
|
30
|
+
:short => "-K PASSWORD",
|
|
31
|
+
:long => "--terremark-password PASSWORD",
|
|
32
|
+
:description => "Your terremark password",
|
|
33
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:terremark_password] = key }
|
|
34
|
+
|
|
35
|
+
option :terremark_username,
|
|
36
|
+
:short => "-A USERNAME",
|
|
37
|
+
:long => "--terremark-username USERNAME",
|
|
38
|
+
:description => "Your terremark username",
|
|
39
|
+
:proc => Proc.new { |username| Chef::Config[:knife][:terremark_username] = username }
|
|
40
|
+
|
|
41
|
+
option :terremark_service,
|
|
42
|
+
:short => "-S SERVICE",
|
|
43
|
+
:long => "--terremark-service SERVICE",
|
|
44
|
+
:description => "Your terremark service name",
|
|
45
|
+
:proc => Proc.new { |service| Chef::Config[:knife][:terremark_service] = service }
|
|
46
|
+
|
|
47
|
+
def h
|
|
48
|
+
@highline ||= HighLine.new
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def run
|
|
52
|
+
require 'fog'
|
|
53
|
+
require 'highline'
|
|
54
|
+
|
|
55
|
+
server_name = @name_args[0]
|
|
56
|
+
|
|
57
|
+
terremark = Fog::Terremark.new(
|
|
58
|
+
:terremark_username => Chef::Config[:knife][:terremark_username],
|
|
59
|
+
:terremark_password => Chef::Config[:knife][:terremark_password],
|
|
60
|
+
:terremark_service => Chef::Config[:knife][:terremark_service] || :vcloud
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
$stdout.sync = true
|
|
64
|
+
|
|
65
|
+
server_list = [ h.color('ID', :bold), h.color('Name', :bold) ]
|
|
66
|
+
terremark.servers.all.each do |server|
|
|
67
|
+
server_list << server.id.to_s
|
|
68
|
+
server_list << server.name
|
|
69
|
+
end
|
|
70
|
+
puts h.list(server_list, :columns_across, 2)
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Doug MacEachern <dougm@vmware.com>
|
|
3
|
+
# Copyright:: Copyright (c) 2010 VMware, 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 'fileutils'
|
|
20
|
+
require 'chef/knife/bootstrap.rb'
|
|
21
|
+
|
|
22
|
+
class Chef
|
|
23
|
+
class Knife
|
|
24
|
+
class WindowsBootstrap < Chef::Knife::Bootstrap
|
|
25
|
+
|
|
26
|
+
banner "knife windows bootstrap FQDN [RUN LIST...] (options)"
|
|
27
|
+
|
|
28
|
+
option :user,
|
|
29
|
+
:short => "-x USERNAME",
|
|
30
|
+
:long => "--user USERNAME",
|
|
31
|
+
:description => "The Windows username"
|
|
32
|
+
|
|
33
|
+
option :password,
|
|
34
|
+
:short => "-P PASSWORD",
|
|
35
|
+
:long => "--password PASSWORD",
|
|
36
|
+
:description => "The Windows password"
|
|
37
|
+
|
|
38
|
+
option :chef_node_name,
|
|
39
|
+
:short => "-N NAME",
|
|
40
|
+
:long => "--node-name NAME",
|
|
41
|
+
:description => "The Chef node name for your new node"
|
|
42
|
+
|
|
43
|
+
option :distro,
|
|
44
|
+
:short => "-d DISTRO",
|
|
45
|
+
:long => "--distro DISTRO",
|
|
46
|
+
:description => "Bootstrap a distro using a template",
|
|
47
|
+
:default => "windows-gems"
|
|
48
|
+
|
|
49
|
+
option :template_file,
|
|
50
|
+
:long => "--template-file TEMPLATE",
|
|
51
|
+
:description => "Full path to location of template to use",
|
|
52
|
+
:default => false
|
|
53
|
+
|
|
54
|
+
option :run_list,
|
|
55
|
+
:short => "-r RUN_LIST",
|
|
56
|
+
:long => "--run-list RUN_LIST",
|
|
57
|
+
:description => "Comma separated list of roles/recipes to apply",
|
|
58
|
+
:proc => lambda { |o| o.split(",") },
|
|
59
|
+
:default => []
|
|
60
|
+
|
|
61
|
+
def is_mounted
|
|
62
|
+
@net_use ||= Chef::Util::Windows::NetUse.new(@admin_share)
|
|
63
|
+
begin
|
|
64
|
+
@net_use.get_info
|
|
65
|
+
return true
|
|
66
|
+
rescue
|
|
67
|
+
return false
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def mount_admin_share
|
|
72
|
+
if @add_mount && !is_mounted
|
|
73
|
+
use = {
|
|
74
|
+
:remote => @admin_share, :local => '',
|
|
75
|
+
:username => config[:user], :password => config[:password]
|
|
76
|
+
}
|
|
77
|
+
@net_use.add(use)
|
|
78
|
+
if is_mounted
|
|
79
|
+
Chef::Log.info("Mounted #{@admin_share} for copying files")
|
|
80
|
+
else
|
|
81
|
+
Chef::Log.fatal("Failed to mount #{@admin_share}")
|
|
82
|
+
exit 1
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def unmount_admin_share
|
|
88
|
+
if @add_mount && is_mounted
|
|
89
|
+
Chef::Log.debug("Unmounting #{@admin_share}")
|
|
90
|
+
@net_use.delete
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def psexec(args)
|
|
95
|
+
cmd = ['psexec', @unc_path, "-h", "-w", 'c:\chef\tmp']
|
|
96
|
+
if config[:user]
|
|
97
|
+
cmd << "-u" << config[:user]
|
|
98
|
+
end
|
|
99
|
+
if config[:password]
|
|
100
|
+
cmd << "-p" << config[:password]
|
|
101
|
+
end
|
|
102
|
+
cmd << args
|
|
103
|
+
cmd = cmd.join(' ')
|
|
104
|
+
Chef::Log.debug("system #{cmd}")
|
|
105
|
+
system(cmd)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def run
|
|
109
|
+
require 'chef/util/windows/net_use'
|
|
110
|
+
|
|
111
|
+
if @name_args.first == nil
|
|
112
|
+
Chef::Log.error("Must pass a node name/ip to windows bootstrap")
|
|
113
|
+
exit 1
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
config[:server_name] = @name_args.first
|
|
117
|
+
if Chef::Config[:http_proxy]
|
|
118
|
+
uri = URI.parse(Chef::Config[:http_proxy])
|
|
119
|
+
config[:proxy] = "#{uri.host}:#{uri.port}"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
@unc_path = "\\\\#{config[:server_name]}"
|
|
123
|
+
@admin_share = "#{@unc_path}\\c$"
|
|
124
|
+
path = "#{@admin_share}\\chef"
|
|
125
|
+
etc = "#{path}\\etc"
|
|
126
|
+
tmp = "#{path}\\tmp"
|
|
127
|
+
|
|
128
|
+
$stdout.sync = true
|
|
129
|
+
|
|
130
|
+
command = render_template(load_template(config[:bootstrap_template]))
|
|
131
|
+
|
|
132
|
+
Chef::Log.info("Bootstrapping Chef on #{config[:server_name]}")
|
|
133
|
+
|
|
134
|
+
@add_mount = config[:user] != nil && !is_mounted
|
|
135
|
+
mount_admin_share
|
|
136
|
+
|
|
137
|
+
begin
|
|
138
|
+
[etc, tmp, "#{path}\\log"].each do |dir|
|
|
139
|
+
unless File.exists?(dir)
|
|
140
|
+
Chef::Log.debug("mkdir_p #{dir}")
|
|
141
|
+
FileUtils.mkdir_p(dir)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
File.open("#{tmp}\\bootstrap.bat", 'w') {|f| f.write(command) }
|
|
145
|
+
FileUtils.cp(File.join(File.dirname(__FILE__), 'bootstrap', 'client-install.vbs'), tmp)
|
|
146
|
+
FileUtils.cp(Chef::Config[:validation_key], etc)
|
|
147
|
+
psexec("cmd.exe /c bootstrap.bat")
|
|
148
|
+
ensure
|
|
149
|
+
unmount_admin_share
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|