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,133 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/provider/package'
|
|
20
|
+
require 'chef/mixin/command'
|
|
21
|
+
require 'chef/resource/package'
|
|
22
|
+
require 'singleton'
|
|
23
|
+
|
|
24
|
+
class Chef
|
|
25
|
+
class Provider
|
|
26
|
+
class Package
|
|
27
|
+
class Zypper < Chef::Provider::Package
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def load_current_resource
|
|
31
|
+
@current_resource = Chef::Resource::Package.new(@new_resource.name)
|
|
32
|
+
@current_resource.package_name(@new_resource.package_name)
|
|
33
|
+
|
|
34
|
+
is_installed=false
|
|
35
|
+
is_out_of_date=false
|
|
36
|
+
version=''
|
|
37
|
+
oud_version=''
|
|
38
|
+
Chef::Log.debug("Checking zypper for #{@new_resource.package_name}")
|
|
39
|
+
status = popen4("zypper info #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
|
|
40
|
+
stdout.each do |line|
|
|
41
|
+
case line
|
|
42
|
+
when /^Version: (.+)$/
|
|
43
|
+
version = $1
|
|
44
|
+
Chef::Log.debug("zypper version=#{$1}")
|
|
45
|
+
when /^Installed: Yes$/
|
|
46
|
+
is_installed=true
|
|
47
|
+
Chef::Log.debug("zypper installed true")
|
|
48
|
+
|
|
49
|
+
when /^Installed: No$/
|
|
50
|
+
is_installed=false
|
|
51
|
+
Chef::Log.debug("zypper installed false")
|
|
52
|
+
when /^Status: out-of-date \(version (.+) installed\)$/
|
|
53
|
+
is_out_of_date=true
|
|
54
|
+
oud_version=$1
|
|
55
|
+
Chef::Log.debug("zypper out of date version=#{$1}")
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
if is_installed==false
|
|
61
|
+
@candidate_version=version
|
|
62
|
+
@current_resource.version(nil)
|
|
63
|
+
Chef::Log.debug("dentro installed false");
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
if is_installed==true
|
|
67
|
+
if is_out_of_date==true
|
|
68
|
+
@current_resource.version(oud_version)
|
|
69
|
+
@candidate_version=version
|
|
70
|
+
Chef::Log.debug("dentro installed outofdate");
|
|
71
|
+
else
|
|
72
|
+
@current_resource.version(version)
|
|
73
|
+
@candidate_version=version
|
|
74
|
+
Chef::Log.debug("dentro installed");
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
unless status.exitstatus == 0
|
|
80
|
+
raise Chef::Exceptions::Package, "zypper failed - #{status.inspect}!"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
Chef::Log.debug("zypper current resource #{@current_resource}")
|
|
85
|
+
@current_resource
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def install_package(name, version)
|
|
89
|
+
if version
|
|
90
|
+
run_command(
|
|
91
|
+
:command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
|
|
92
|
+
)
|
|
93
|
+
else
|
|
94
|
+
run_command(
|
|
95
|
+
:command => "zypper -n --no-gpg-checks install -l #{name}"
|
|
96
|
+
)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def upgrade_package(name, version)
|
|
101
|
+
if version
|
|
102
|
+
run_command(
|
|
103
|
+
:command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
|
|
104
|
+
)
|
|
105
|
+
else
|
|
106
|
+
run_command(
|
|
107
|
+
:command => "zypper -n --no-gpg-checks install -l #{name}"
|
|
108
|
+
)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def remove_package(name, version)
|
|
113
|
+
if version
|
|
114
|
+
run_command(
|
|
115
|
+
:command => "zypper -n --no-gpg-checks remove #{name}=#{version}"
|
|
116
|
+
)
|
|
117
|
+
else
|
|
118
|
+
run_command(
|
|
119
|
+
:command => "zypper -n --no-gpg-checks remove #{name}"
|
|
120
|
+
)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def purge_package(name, version)
|
|
127
|
+
remove_package(name, version)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/provider/file'
|
|
20
|
+
require 'chef/provider/directory'
|
|
21
|
+
require 'chef/resource/directory'
|
|
22
|
+
require 'chef/resource/remote_file'
|
|
23
|
+
require 'chef/platform'
|
|
24
|
+
require 'uri'
|
|
25
|
+
require 'tempfile'
|
|
26
|
+
require 'net/https'
|
|
27
|
+
require 'set'
|
|
28
|
+
|
|
29
|
+
class Chef
|
|
30
|
+
class Provider
|
|
31
|
+
class RemoteDirectory < Chef::Provider::Directory
|
|
32
|
+
|
|
33
|
+
def action_create
|
|
34
|
+
super
|
|
35
|
+
Chef::Log.debug("Doing a remote recursive directory transfer for #{@new_resource}")
|
|
36
|
+
|
|
37
|
+
files_to_purge = Set.new(
|
|
38
|
+
Dir.glob(::File.join(@new_resource.path, '**', '*'), ::File::FNM_DOTMATCH).select do |name|
|
|
39
|
+
name !~ /(?:^|#{Regexp.escape(::File::SEPARATOR)})\.\.?$/
|
|
40
|
+
end
|
|
41
|
+
)
|
|
42
|
+
files_to_transfer.each do |cookbook_file_relative_path|
|
|
43
|
+
create_cookbook_file(cookbook_file_relative_path)
|
|
44
|
+
files_to_purge.delete(::File.dirname(::File.join(@new_resource.path, cookbook_file_relative_path)))
|
|
45
|
+
files_to_purge.delete(::File.join(@new_resource.path, cookbook_file_relative_path))
|
|
46
|
+
end
|
|
47
|
+
purge_unmanaged_files(files_to_purge)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def action_create_if_missing
|
|
51
|
+
# if this action is called, ignore the existing overwrite flag
|
|
52
|
+
@new_resource.overwrite = false
|
|
53
|
+
action_create
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
protected
|
|
57
|
+
|
|
58
|
+
def purge_unmanaged_files(unmanaged_files)
|
|
59
|
+
if @new_resource.purge
|
|
60
|
+
unmanaged_files.sort.reverse.each do |f|
|
|
61
|
+
if ::File.directory?(f)
|
|
62
|
+
Chef::Log.debug("Removing directory #{f}")
|
|
63
|
+
Dir::rmdir(f)
|
|
64
|
+
else
|
|
65
|
+
Chef::Log.debug("Deleting file #{f}")
|
|
66
|
+
::File.delete(f)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def files_to_transfer
|
|
73
|
+
cookbook = run_context.cookbook_collection[resource_cookbook]
|
|
74
|
+
files = cookbook.relative_filenames_in_preferred_directory(node, :files, @new_resource.source)
|
|
75
|
+
files.sort.reverse
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def directory_root_in_cookbook_cache
|
|
79
|
+
@directory_root_in_cookbook_cache ||= begin
|
|
80
|
+
cookbook = run_context.cookbook_collection[resource_cookbook]
|
|
81
|
+
cookbook.preferred_filename_on_disk_location(node, :files, @new_resource.source, @new_resource.path)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Determine the cookbook to get the file from. If new resource sets an
|
|
86
|
+
# explicit cookbook, use it, otherwise fall back to the implicit cookbook
|
|
87
|
+
# i.e., the cookbook the resource was declared in.
|
|
88
|
+
def resource_cookbook
|
|
89
|
+
@new_resource.cookbook || @new_resource.cookbook_name
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def create_cookbook_file(cookbook_file_relative_path)
|
|
93
|
+
full_path = ::File.join(@new_resource.path, cookbook_file_relative_path)
|
|
94
|
+
|
|
95
|
+
ensure_directory_exists(::File.dirname(full_path))
|
|
96
|
+
|
|
97
|
+
file_to_fetch = cookbook_file_resource(full_path, cookbook_file_relative_path)
|
|
98
|
+
if @new_resource.overwrite
|
|
99
|
+
file_to_fetch.run_action(:create)
|
|
100
|
+
else
|
|
101
|
+
file_to_fetch.run_action(:create_if_missing)
|
|
102
|
+
end
|
|
103
|
+
@new_resource.updated_by_last_action(true) if file_to_fetch.updated?
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def cookbook_file_resource(target_path, relative_source_path)
|
|
107
|
+
cookbook_file = Chef::Resource::CookbookFile.new(target_path, run_context)
|
|
108
|
+
cookbook_file.cookbook_name = @new_resource.cookbook || @new_resource.cookbook_name
|
|
109
|
+
cookbook_file.source(::File.join(@new_resource.source, relative_source_path))
|
|
110
|
+
cookbook_file.mode(@new_resource.files_mode) if @new_resource.files_mode
|
|
111
|
+
cookbook_file.group(@new_resource.files_group) if @new_resource.files_group
|
|
112
|
+
cookbook_file.owner(@new_resource.files_owner) if @new_resource.files_owner
|
|
113
|
+
cookbook_file.backup(@new_resource.files_backup) if @new_resource.files_backup
|
|
114
|
+
|
|
115
|
+
cookbook_file
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def ensure_directory_exists(path)
|
|
119
|
+
unless ::File.directory?(path)
|
|
120
|
+
directory_to_create = resource_for_directory(path)
|
|
121
|
+
directory_to_create.run_action(:create)
|
|
122
|
+
@new_resource.updated_by_last_action(true) if directory_to_create.updated?
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def resource_for_directory(path)
|
|
127
|
+
dir = Chef::Resource::Directory.new(path, run_context)
|
|
128
|
+
dir.cookbook_name = @new_resource.cookbook || @new_resource.cookbook_name
|
|
129
|
+
dir.mode(@new_resource.mode)
|
|
130
|
+
dir.group(@new_resource.group)
|
|
131
|
+
dir.owner(@new_resource.owner)
|
|
132
|
+
dir.recursive(true)
|
|
133
|
+
dir
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'chef/provider/file'
|
|
20
|
+
require 'chef/rest'
|
|
21
|
+
require 'uri'
|
|
22
|
+
require 'tempfile'
|
|
23
|
+
require 'net/https'
|
|
24
|
+
|
|
25
|
+
class Chef
|
|
26
|
+
class Provider
|
|
27
|
+
class RemoteFile < Chef::Provider::File
|
|
28
|
+
|
|
29
|
+
def load_current_resource
|
|
30
|
+
super
|
|
31
|
+
@current_resource.checksum(checksum(@current_resource.path)) if ::File.exist?(@current_resource.path)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def action_create
|
|
35
|
+
assert_enclosing_directory_exists!
|
|
36
|
+
|
|
37
|
+
Chef::Log.debug("Checking #{@new_resource} for changes")
|
|
38
|
+
|
|
39
|
+
if current_resource_matches_target_checksum?
|
|
40
|
+
Chef::Log.debug("File #{@new_resource} checksum matches target checksum (#{@new_resource.checksum}), not updating")
|
|
41
|
+
else
|
|
42
|
+
Chef::REST.new(@new_resource.source, nil, nil).fetch(@new_resource.source) do |raw_file|
|
|
43
|
+
if matches_current_checksum?(raw_file)
|
|
44
|
+
Chef::Log.debug "#{@new_resource}: Target and Source checksums are the same, taking no action"
|
|
45
|
+
else
|
|
46
|
+
backup_new_resource
|
|
47
|
+
Chef::Log.debug "copying remote file from origin #{raw_file.path} to destination #{@new_resource.path}"
|
|
48
|
+
FileUtils.cp raw_file.path, @new_resource.path
|
|
49
|
+
@new_resource.updated_by_last_action(true)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
enforce_ownership_and_permissions
|
|
54
|
+
|
|
55
|
+
@new_resource.updated_by_last_action?
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def action_create_if_missing
|
|
59
|
+
if ::File.exists?(@new_resource.path)
|
|
60
|
+
Chef::Log.debug("File #{@new_resource.path} exists, taking no action.")
|
|
61
|
+
else
|
|
62
|
+
action_create
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def enforce_ownership_and_permissions
|
|
67
|
+
set_owner if @new_resource.owner
|
|
68
|
+
set_group if @new_resource.group
|
|
69
|
+
set_mode if @new_resource.mode
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def current_resource_matches_target_checksum?
|
|
73
|
+
@new_resource.checksum && @current_resource.checksum && @current_resource.checksum =~ /^#{Regexp.escape(@new_resource.checksum)}/
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def matches_current_checksum?(candidate_file)
|
|
77
|
+
Chef::Log.debug "#{@new_resource}: Checking for file existence of #{@new_resource.path}"
|
|
78
|
+
if ::File.exists?(@new_resource.path)
|
|
79
|
+
Chef::Log.debug "#{@new_resource}: File exists at #{@new_resource.path}"
|
|
80
|
+
@new_resource.checksum(checksum(candidate_file.path))
|
|
81
|
+
Chef::Log.debug "#{@new_resource}: Target checksum: #{@current_resource.checksum}"
|
|
82
|
+
Chef::Log.debug "#{@new_resource}: Source checksum: #{@new_resource.checksum}"
|
|
83
|
+
|
|
84
|
+
@new_resource.checksum == @current_resource.checksum
|
|
85
|
+
else
|
|
86
|
+
Chef::Log.info "#{@new_resource}: Creating #{@new_resource.path}"
|
|
87
|
+
false
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def backup_new_resource
|
|
92
|
+
if ::File.exists?(@new_resource.path)
|
|
93
|
+
Chef::Log.debug "#{@new_resource}: checksum changed from #{@current_resource.checksum} to #{@new_resource.checksum}"
|
|
94
|
+
Chef::Log.info "#{@new_resource}: Updating #{@new_resource.path}"
|
|
95
|
+
backup @new_resource.path
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def source_file(source, current_checksum, &block)
|
|
100
|
+
if absolute_uri?(source)
|
|
101
|
+
fetch_from_uri(source, &block)
|
|
102
|
+
elsif !Chef::Config[:solo]
|
|
103
|
+
fetch_from_chef_server(source, current_checksum, &block)
|
|
104
|
+
else
|
|
105
|
+
fetch_from_local_cookbook(source, &block)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
private
|
|
110
|
+
|
|
111
|
+
def absolute_uri?(source)
|
|
112
|
+
URI.parse(source).absolute?
|
|
113
|
+
rescue URI::InvalidURIError
|
|
114
|
+
false
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Bryan McLellan (btm@loftninjas.org), Jesse Nelson (spheromak@gmail.com)
|
|
3
|
+
# Copyright:: Copyright (c) 2009 Bryan McLellan
|
|
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/log'
|
|
20
|
+
require 'chef/mixin/command'
|
|
21
|
+
require 'chef/provider'
|
|
22
|
+
require 'ipaddr'
|
|
23
|
+
|
|
24
|
+
class Chef::Provider::Route < Chef::Provider
|
|
25
|
+
include Chef::Mixin::Command
|
|
26
|
+
|
|
27
|
+
attr_accessor :is_running
|
|
28
|
+
|
|
29
|
+
MASK = {'0.0.0.0' => '0',
|
|
30
|
+
'128.0.0.0' => '1',
|
|
31
|
+
'192.0.0.0' => '2',
|
|
32
|
+
'224.0.0.0' => '3',
|
|
33
|
+
'240.0.0.0' => '4',
|
|
34
|
+
'248.0.0.0' => '5',
|
|
35
|
+
'252.0.0.0' => '6',
|
|
36
|
+
'254.0.0.0' => '7',
|
|
37
|
+
'255.0.0.0' => '8',
|
|
38
|
+
'255.128.0.0' => '9',
|
|
39
|
+
'255.192.0.0' => '10',
|
|
40
|
+
'255.224.0.0' => '11',
|
|
41
|
+
'255.240.0.0' => '12',
|
|
42
|
+
'255.248.0.0' => '13',
|
|
43
|
+
'255.252.0.0' => '14',
|
|
44
|
+
'255.254.0.0' => '15',
|
|
45
|
+
'255.255.0.0' => '16',
|
|
46
|
+
'255.255.128.0' => '17',
|
|
47
|
+
'255.255.192.0' => '18',
|
|
48
|
+
'255.255.224.0' => '19',
|
|
49
|
+
'255.255.240.0' => '20',
|
|
50
|
+
'255.255.248.0' => '21',
|
|
51
|
+
'255.255.252.0' => '22',
|
|
52
|
+
'255.255.254.0' => '23',
|
|
53
|
+
'255.255.255.0' => '24',
|
|
54
|
+
'255.255.255.128' => '25',
|
|
55
|
+
'255.255.255.192' => '26',
|
|
56
|
+
'255.255.255.224' => '27',
|
|
57
|
+
'255.255.255.240' => '28',
|
|
58
|
+
'255.255.255.248' => '29',
|
|
59
|
+
'255.255.255.252' => '30',
|
|
60
|
+
'255.255.255.254' => '31',
|
|
61
|
+
'255.255.255.255' => '32' }
|
|
62
|
+
|
|
63
|
+
def load_current_resource
|
|
64
|
+
is_running = nil
|
|
65
|
+
|
|
66
|
+
Chef::Log.debug("Configuring Route #{@new_resource.name}")
|
|
67
|
+
|
|
68
|
+
# cidr or quad dot mask
|
|
69
|
+
if @new_resource.netmask
|
|
70
|
+
new_ip = IPAddr.new("#{@new_resource.target}/#{@new_resource.netmask}")
|
|
71
|
+
else
|
|
72
|
+
new_ip = IPAddr.new(@new_resource.target)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# pull routes from proc
|
|
76
|
+
if node[:os] == "linux"
|
|
77
|
+
route_file = ::File.open("/proc/net/route", "r")
|
|
78
|
+
while (line = route_file.gets)
|
|
79
|
+
# proc layout
|
|
80
|
+
iface,destination,gateway,flags,refcnt,use,metric,mask,mtu,window,irtt = line.split
|
|
81
|
+
|
|
82
|
+
# need to convert packed adresses int quad dot
|
|
83
|
+
# the addrs are reversed hex packed decimal addrs. so this unwraps them. tho you could
|
|
84
|
+
# do this without ipaddr using unpack. ipaddr has no htoa method.
|
|
85
|
+
#
|
|
86
|
+
destination = IPAddr.new(destination.scan(/../).reverse.to_s.hex, Socket::AF_INET).to_s
|
|
87
|
+
gateway = IPAddr.new(gateway.scan(/../).reverse.to_s.hex, Socket::AF_INET).to_s
|
|
88
|
+
mask = IPAddr.new(mask.scan(/../).reverse.to_s.hex, Socket::AF_INET).to_s
|
|
89
|
+
Chef::Log.debug( "System has route: dest=#{destination} mask=#{mask} gw=#{gateway}")
|
|
90
|
+
|
|
91
|
+
# check if what were trying to configure is already there
|
|
92
|
+
# use an ipaddr object with ip/mask this way we can have
|
|
93
|
+
# a new resource be in cidr format (i don't feel like
|
|
94
|
+
# expanding bitmask by hand.
|
|
95
|
+
#
|
|
96
|
+
running_ip = IPAddr.new("#{destination}/#{mask}")
|
|
97
|
+
Chef::Log.debug( "new ip: #{new_ip.inspect} running ip: #{running_ip.inspect} ")
|
|
98
|
+
is_running = true if running_ip == new_ip
|
|
99
|
+
end
|
|
100
|
+
route_file.close
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def action_add
|
|
105
|
+
# check to see if load_current_resource found the route
|
|
106
|
+
if is_running
|
|
107
|
+
Chef::Log.debug("Route #{@new_resource.name} already active ")
|
|
108
|
+
else
|
|
109
|
+
command = generate_command(:add)
|
|
110
|
+
|
|
111
|
+
Chef::Log.info("Adding route: #{command} ")
|
|
112
|
+
run_command( :command => command )
|
|
113
|
+
@new_resource.updated_by_last_action(true)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
#for now we always write the file (ugly but its what it is)
|
|
117
|
+
generate_config
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def action_delete
|
|
121
|
+
if is_running
|
|
122
|
+
command = generate_command(:delete)
|
|
123
|
+
|
|
124
|
+
Chef::Log.info("Removing route: #{command}")
|
|
125
|
+
run_command( :command => command )
|
|
126
|
+
@new_resource.updated_by_last_action(true)
|
|
127
|
+
else
|
|
128
|
+
Chef::Log.debug("Route #{@new_resource.name} does not exist")
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def generate_config
|
|
133
|
+
conf = Hash.new
|
|
134
|
+
case node[:platform]
|
|
135
|
+
when ("centos" || "redhat" || "fedora")
|
|
136
|
+
# walk the collection
|
|
137
|
+
run_context.resource_collection.each do |resource|
|
|
138
|
+
if resource.is_a? Chef::Resource::Route
|
|
139
|
+
# default to eth0
|
|
140
|
+
if resource.device
|
|
141
|
+
dev = resource.device
|
|
142
|
+
else
|
|
143
|
+
dev = "eth0"
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
conf[dev] = String.new if conf[dev].nil?
|
|
147
|
+
if resource.action == :add
|
|
148
|
+
conf[dev] = config_file_contents(:add, :target => resource.target, :netmask => resource.netmask, :gateway => resource.gateway)
|
|
149
|
+
else
|
|
150
|
+
# need to do this for the case when the last route on an int
|
|
151
|
+
# is removed
|
|
152
|
+
conf[dev] = config_file_contents(:delete)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
conf.each do |k, v|
|
|
157
|
+
network_file = ::File.new("/etc/sysconfig/network-scripts/route-#{k}", "w")
|
|
158
|
+
network_file.puts(conf[k])
|
|
159
|
+
Chef::Log.debug("writing route.#{k}\n#{conf[k]}")
|
|
160
|
+
network_file.close
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def generate_command(action)
|
|
166
|
+
common_route_items = ''
|
|
167
|
+
common_route_items << "/#{MASK[@new_resource.netmask.to_s]}" if @new_resource.netmask
|
|
168
|
+
common_route_items << " via #{@new_resource.gateway} " if @new_resource.gateway
|
|
169
|
+
|
|
170
|
+
case action
|
|
171
|
+
when :add
|
|
172
|
+
command = "ip route replace #{@new_resource.target}"
|
|
173
|
+
command << common_route_items
|
|
174
|
+
command << " dev #{@new_resource.device} " if @new_resource.device
|
|
175
|
+
when :delete
|
|
176
|
+
command = "ip route delete #{@new_resource.target}"
|
|
177
|
+
command << common_route_items
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
return command
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def config_file_contents(action, options={})
|
|
184
|
+
content = ''
|
|
185
|
+
case action
|
|
186
|
+
when :add
|
|
187
|
+
content << "#{options[:target]}"
|
|
188
|
+
content << "/#{options[:netmask]}" if options[:netmask]
|
|
189
|
+
content << " via #{options[:gateway]}" if options[:gateway]
|
|
190
|
+
content << "\n"
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
return content
|
|
194
|
+
end
|
|
195
|
+
end
|