right_link 5.9.0

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.
Files changed (199) hide show
  1. data/actors/agent_manager.rb +88 -0
  2. data/actors/instance_scheduler.rb +321 -0
  3. data/actors/instance_services.rb +64 -0
  4. data/actors/instance_setup.rb +567 -0
  5. data/bin/cloud +25 -0
  6. data/bin/cook_runner +44 -0
  7. data/bin/deploy +120 -0
  8. data/bin/enroll +385 -0
  9. data/bin/rad +32 -0
  10. data/bin/rchk +29 -0
  11. data/bin/rnac +39 -0
  12. data/bin/rs_connect +33 -0
  13. data/bin/rs_log_level +31 -0
  14. data/bin/rs_ohai +28 -0
  15. data/bin/rs_reenroll +31 -0
  16. data/bin/rs_run_recipe +34 -0
  17. data/bin/rs_run_right_script +34 -0
  18. data/bin/rs_shutdown +33 -0
  19. data/bin/rs_tag +33 -0
  20. data/bin/rs_thunk +33 -0
  21. data/bin/rstat +31 -0
  22. data/bin/system +16 -0
  23. data/ext/Rakefile +18 -0
  24. data/init/config.yml +5 -0
  25. data/init/init.rb +79 -0
  26. data/lib/chef/ohai_setup.rb +51 -0
  27. data/lib/chef/plugins/cloud.rb +91 -0
  28. data/lib/chef/plugins/cloudstack.rb +23 -0
  29. data/lib/chef/plugins/ec2.rb +23 -0
  30. data/lib/chef/plugins/linux/block_device2.rb +24 -0
  31. data/lib/chef/plugins/rackspace.rb +23 -0
  32. data/lib/chef/plugins/rightscale.rb +125 -0
  33. data/lib/chef/plugins/windows/network.rb +114 -0
  34. data/lib/chef/plugins.rb +74 -0
  35. data/lib/chef/providers/dns_dnsmadeeasy_provider.rb +81 -0
  36. data/lib/chef/providers/dns_resource.rb +100 -0
  37. data/lib/chef/providers/executable_schedule_provider.rb +70 -0
  38. data/lib/chef/providers/executable_schedule_resource.rb +144 -0
  39. data/lib/chef/providers/remote_recipe_provider.rb +86 -0
  40. data/lib/chef/providers/remote_recipe_resource.rb +101 -0
  41. data/lib/chef/providers/right_link_tag_provider.rb +73 -0
  42. data/lib/chef/providers/right_link_tag_resource.rb +59 -0
  43. data/lib/chef/providers/right_script_provider.rb +190 -0
  44. data/lib/chef/providers/right_script_resource.rb +113 -0
  45. data/lib/chef/providers/rs_shutdown_provider.rb +75 -0
  46. data/lib/chef/providers/rs_shutdown_resource.rb +55 -0
  47. data/lib/chef/providers/server_collection_provider.rb +66 -0
  48. data/lib/chef/providers/server_collection_resource.rb +93 -0
  49. data/lib/chef/providers/windows/powershell_provider.rb +151 -0
  50. data/lib/chef/providers/windows/powershell_resource.rb +111 -0
  51. data/lib/chef/providers/windows/unsupported_provider.rb +51 -0
  52. data/lib/chef/right_providers.rb +55 -0
  53. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/ChefNodeCmdlet.csproj +104 -0
  54. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/ChefNodeCmdlet.dll-Help.xml +141 -0
  55. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/Exceptions.cs +182 -0
  56. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetChefNodeCommand.cs +58 -0
  57. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetChefNodeRequest.cs +46 -0
  58. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetChefNodeResponse.cs +45 -0
  59. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetCurrentResourceCommand.cs +58 -0
  60. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetCurrentResourceRequest.cs +46 -0
  61. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetCurrentResourceResponse.cs +45 -0
  62. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetNewResourceCommand.cs +58 -0
  63. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetNewResourceRequest.cs +46 -0
  64. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetNewResourceResponse.cs +45 -0
  65. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetNextActionCommand.cs +178 -0
  66. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetNextActionRequest.cs +67 -0
  67. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetNextActionResponse.cs +58 -0
  68. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetNodeValueCommandBase.cs +142 -0
  69. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetNodeValueRequestBase.cs +64 -0
  70. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/GetNodeValueResponseBase.cs +69 -0
  71. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/JsonTransport.cs +110 -0
  72. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/PipeClient.cs +158 -0
  73. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/PipeServer.cs +142 -0
  74. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/Properties/AssemblyInfo.cs +16 -0
  75. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/ProtocolConstants.cs +55 -0
  76. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/ProtocolUtilities.cs +77 -0
  77. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/ReadMe.txt +53 -0
  78. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetChefNodeCommand.cs +59 -0
  79. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetChefNodeRequest.cs +46 -0
  80. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetChefNodeResponse.cs +58 -0
  81. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetCurrentResourceCommand.cs +59 -0
  82. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetCurrentResourceRequest.cs +46 -0
  83. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetCurrentResourceResponse.cs +40 -0
  84. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetNewResourceCommand.cs +59 -0
  85. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetNewResourceRequest.cs +46 -0
  86. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetNewResourceResponse.cs +40 -0
  87. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetNodeValueCommandBase.cs +293 -0
  88. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetNodeValueRequestBase.cs +75 -0
  89. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/SetNodeValueResponseBase.cs +45 -0
  90. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet/Transport.cs +91 -0
  91. data/lib/chef/windows/ChefNodeCmdlet/ChefNodeCmdlet.sln +35 -0
  92. data/lib/chef/windows/ChefNodeCmdlet/TestChefNodeCmdlet/Program.cs +374 -0
  93. data/lib/chef/windows/ChefNodeCmdlet/TestChefNodeCmdlet/Properties/AssemblyInfo.cs +16 -0
  94. data/lib/chef/windows/ChefNodeCmdlet/TestChefNodeCmdlet/TestChefNodeCmdlet.csproj +65 -0
  95. data/lib/chef/windows/ChefNodeCmdlet/TestNextActionCmdlet/Program.cs +136 -0
  96. data/lib/chef/windows/ChefNodeCmdlet/TestNextActionCmdlet/Properties/AssemblyInfo.cs +36 -0
  97. data/lib/chef/windows/ChefNodeCmdlet/TestNextActionCmdlet/ReadMe.txt +46 -0
  98. data/lib/chef/windows/ChefNodeCmdlet/TestNextActionCmdlet/TestNextActionCmdlet.csproj +68 -0
  99. data/lib/chef/windows/bin/Newtonsoft.Json.dll +0 -0
  100. data/lib/chef/windows/chef_node_server.rb +463 -0
  101. data/lib/chef/windows/dynamic_powershell_provider.rb +296 -0
  102. data/lib/chef/windows/pipe_server.rb +283 -0
  103. data/lib/chef/windows/powershell_host.rb +285 -0
  104. data/lib/chef/windows/powershell_pipe_server.rb +136 -0
  105. data/lib/chef/windows/powershell_provider_base.rb +92 -0
  106. data/lib/chef/windows/scripts/run_loop.ps1 +105 -0
  107. data/lib/clouds/cloud.rb +557 -0
  108. data/lib/clouds/cloud_factory.rb +250 -0
  109. data/lib/clouds/cloud_utilities.rb +244 -0
  110. data/lib/clouds/clouds/azure.rb +106 -0
  111. data/lib/clouds/clouds/cloudstack.rb +114 -0
  112. data/lib/clouds/clouds/ec2.rb +113 -0
  113. data/lib/clouds/clouds/eucalyptus.rb +46 -0
  114. data/lib/clouds/clouds/google.rb +102 -0
  115. data/lib/clouds/clouds/none.rb +76 -0
  116. data/lib/clouds/clouds/openstack.rb +30 -0
  117. data/lib/clouds/clouds/rackspace-ng.rb +54 -0
  118. data/lib/clouds/clouds/rackspace.rb +78 -0
  119. data/lib/clouds/clouds/softlayer.rb +91 -0
  120. data/lib/clouds/metadata_formatter.rb +108 -0
  121. data/lib/clouds/metadata_provider.rb +128 -0
  122. data/lib/clouds/metadata_source.rb +87 -0
  123. data/lib/clouds/metadata_sources/certificate_metadata_source.rb +207 -0
  124. data/lib/clouds/metadata_sources/config_drive_metadata_source.rb +129 -0
  125. data/lib/clouds/metadata_sources/file_metadata_source.rb +74 -0
  126. data/lib/clouds/metadata_sources/http_metadata_source.rb +277 -0
  127. data/lib/clouds/metadata_sources/selective_metadata_source.rb +122 -0
  128. data/lib/clouds/metadata_tree_climber.rb +144 -0
  129. data/lib/clouds/metadata_writer.rb +155 -0
  130. data/lib/clouds/metadata_writers/dictionary_metadata_writer.rb +72 -0
  131. data/lib/clouds/metadata_writers/ruby_metadata_writer.rb +76 -0
  132. data/lib/clouds/metadata_writers/shell_metadata_writer.rb +121 -0
  133. data/lib/clouds/register_clouds.rb +34 -0
  134. data/lib/clouds.rb +32 -0
  135. data/lib/gem_dependencies.rb +83 -0
  136. data/lib/git_hooks/commit-msg.rb +7 -0
  137. data/lib/instance/agent_config.rb +168 -0
  138. data/lib/instance/agent_watcher.rb +233 -0
  139. data/lib/instance/audit_cook_stub.rb +104 -0
  140. data/lib/instance/audit_proxy.rb +247 -0
  141. data/lib/instance/bundle_queue.rb +104 -0
  142. data/lib/instance/cook/agent_connection.rb +109 -0
  143. data/lib/instance/cook/audit_logger.rb +165 -0
  144. data/lib/instance/cook/audit_stub.rb +142 -0
  145. data/lib/instance/cook/ca-bundle.crt +2794 -0
  146. data/lib/instance/cook/chef_state.rb +211 -0
  147. data/lib/instance/cook/cook.rb +306 -0
  148. data/lib/instance/cook/cook_state.rb +298 -0
  149. data/lib/instance/cook/cookbook_path_mapping.rb +66 -0
  150. data/lib/instance/cook/cookbook_repo_retriever.rb +190 -0
  151. data/lib/instance/cook/executable_sequence.rb +765 -0
  152. data/lib/instance/cook/external_parameter_gatherer.rb +190 -0
  153. data/lib/instance/cook/repose_downloader.rb +349 -0
  154. data/lib/instance/cook/shutdown_request_proxy.rb +121 -0
  155. data/lib/instance/cook.rb +41 -0
  156. data/lib/instance/downloader.rb +208 -0
  157. data/lib/instance/duplicable.rb +67 -0
  158. data/lib/instance/exceptions.rb +49 -0
  159. data/lib/instance/executable_sequence_proxy.rb +278 -0
  160. data/lib/instance/instance_commands.rb +577 -0
  161. data/lib/instance/instance_state.rb +633 -0
  162. data/lib/instance/json_utilities.rb +102 -0
  163. data/lib/instance/login_manager.rb +533 -0
  164. data/lib/instance/login_user_manager.rb +522 -0
  165. data/lib/instance/message_encoder.rb +118 -0
  166. data/lib/instance/multi_thread_bundle_queue.rb +232 -0
  167. data/lib/instance/operation_context.rb +60 -0
  168. data/lib/instance/options_bag.rb +65 -0
  169. data/lib/instance/payload_formatter.rb +46 -0
  170. data/lib/instance/policy.rb +53 -0
  171. data/lib/instance/policy_audit.rb +100 -0
  172. data/lib/instance/policy_manager.rb +146 -0
  173. data/lib/instance/reenroll_manager.rb +104 -0
  174. data/lib/instance/right_scripts_cookbook.rb +181 -0
  175. data/lib/instance/shutdown_request.rb +221 -0
  176. data/lib/instance/single_thread_bundle_queue.rb +189 -0
  177. data/lib/instance/volume_management.rb +450 -0
  178. data/lib/instance.rb +50 -0
  179. data/lib/repo_conf_generators/apt_conf_generators.rb +106 -0
  180. data/lib/repo_conf_generators/gem_conf_generators.rb +80 -0
  181. data/lib/repo_conf_generators/rightscale_conf_generators.rb +254 -0
  182. data/lib/repo_conf_generators/rightscale_key.pub +17 -0
  183. data/lib/repo_conf_generators/yum_conf_generators.rb +225 -0
  184. data/lib/repo_conf_generators.rb +30 -0
  185. data/lib/run_shell.rb +28 -0
  186. data/scripts/agent_checker.rb +571 -0
  187. data/scripts/agent_controller.rb +247 -0
  188. data/scripts/agent_deployer.rb +148 -0
  189. data/scripts/bundle_runner.rb +336 -0
  190. data/scripts/cloud_controller.rb +176 -0
  191. data/scripts/log_level_manager.rb +142 -0
  192. data/scripts/ohai_runner.rb +33 -0
  193. data/scripts/reenroller.rb +193 -0
  194. data/scripts/server_importer.rb +293 -0
  195. data/scripts/shutdown_client.rb +183 -0
  196. data/scripts/system_configurator.rb +367 -0
  197. data/scripts/tagger.rb +381 -0
  198. data/scripts/thunker.rb +356 -0
  199. metadata +418 -0
@@ -0,0 +1,125 @@
1
+ #
2
+ # Copyright (c) 2009-2011 RightScale Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+
23
+ # = NOTICE
24
+ # This plugin is deprecated!
25
+ #
26
+ # This is an ohai plugin that checks the state of the instance to
27
+ # determine if the RightScale plaform is available and add RightScale
28
+ # configuration data to the chef node. This is the old way of doing things.
29
+ #
30
+ # Going forward we are passing in all RightScale configuration data via
31
+ # attributes called 'core-defined inputs'. You can read more on the wiki:
32
+ # http://rightscale.onconfluence.com/display/rightscale/Cloud+Independent+Attributes
33
+ #
34
+ # This plugin remains until all configuration data is migrated from user-data to
35
+ # core-defined inputs.
36
+
37
+ require 'json'
38
+
39
+ provides "rightscale"
40
+
41
+ class RightScale
42
+ MetaDataFile = "/var/spool/rackspace/user-data.txt"
43
+ end
44
+
45
+ # Adds RightScale server FQDNs to the rightscale_deprecated servers Mash
46
+ #
47
+ # NOTE: This is a hack to convert the RS_(server) tokens into something more
48
+ # intuative. Hopefully this will be removed when we stop using EC2
49
+ # userdata.
50
+ #
51
+ # === Parameters
52
+ # key(String):: RightScale server token from user-data
53
+ # data(String)::: FQDN for the RightScale server
54
+ def add_server(key, data)
55
+ rightscale_deprecated[:server] = Mash.new unless rightscale_deprecated.has_key?(:server)
56
+ server_names = {
57
+ "RS_sketchy" => "sketchy",
58
+ "RS_syslog" => "syslog",
59
+ "RS_lumberjack" => "lumberjack",
60
+ "RS_server" => "core"
61
+ }
62
+ rightscale_deprecated[:server][server_names[key]] = data unless (server_names[key] == nil)
63
+ end
64
+
65
+ # ----------------------------------------
66
+ # cloud
67
+ # ----------------------------------------
68
+ require_plugin "cloud"
69
+
70
+ # Detect if RightScale platform is running on ec2 cloud
71
+ #
72
+ # === Returns
73
+ # true:: If ec2 Mash exists amd RightScale tokens found in user-data
74
+ # false:: Otherwise
75
+ def on_rightscale_ec2_platform?
76
+ return false if (ec2 == nil || ec2[:userdata].match(/RS_/) == nil) # only ec2 supported
77
+ true
78
+ end
79
+
80
+ # add all 'RS_' tokens in userdata, but perform translation for server names
81
+ def get_data_from_ec2_user_date
82
+ data_array = ec2[:userdata].split('&')
83
+ data_array.each do |d|
84
+ key, data = d.split('=')
85
+ rightscale_deprecated[key.sub(/RS_/,'')] = data unless add_server(key,data)
86
+ end
87
+ end
88
+
89
+ # Adds rightscale_deprecated from ec2 user-data, if available
90
+ if on_rightscale_ec2_platform?
91
+ rightscale_deprecated Mash.new
92
+ get_data_from_ec2_user_date
93
+ end
94
+
95
+
96
+ # ----------------------------------------
97
+ # generic cloud
98
+ # ----------------------------------------
99
+
100
+ # Detect if RightScale platform is running on other cloud.
101
+ # currently only rackspace is supported.
102
+ #
103
+ # === Returns
104
+ # true:: If ec2 Mash exists amd RightScale tokens found in user-data
105
+ # false:: Otherwise
106
+ def on_rightscale_platform?
107
+ File.exists?(RightScale::MetaDataFile)
108
+ end
109
+
110
+ # add all 'RS_' tokens in medadata file, but perform translation for server names
111
+ def get_data
112
+ data_array = File.open(RightScale::MetaDataFile)
113
+ data_array.each do |d|
114
+ key, data = d.split('=')
115
+ key.strip!
116
+ data.strip!
117
+ rightscale_deprecated[key.sub(/RS_/,'')] = data unless add_server(key,data)
118
+ end
119
+ end
120
+
121
+ # Adds rightscale_deprecated from metadata file, if available
122
+ if on_rightscale_platform?
123
+ rightscale_deprecated Mash.new
124
+ get_data
125
+ end
@@ -0,0 +1,114 @@
1
+ #
2
+ # Author:: James Gartrell (<jgartrel@gmail.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 'ruby-wmi'
20
+
21
+ def encaps_lookup(encap)
22
+ return "Ethernet" if encap.eql?("Ethernet 802.3")
23
+ encap
24
+ end
25
+
26
+ def derive_bcast(ipaddr, ipmask, zero_bcast = false)
27
+ begin
28
+ ipaddr_int = ipaddr.split(".").collect{ |x| x.to_i}.pack("C4").unpack("N").first
29
+ ipmask_int = ipmask.split(".").collect{ |x| x.to_i}.pack("C4").unpack("N").first
30
+ if zero_bcast
31
+ bcast_int = ipaddr_int & ipmask_int
32
+ else
33
+ bcast_int = ipaddr_int | 2 ** 32 - ipmask_int - 1
34
+ end
35
+ bcast = [bcast_int].pack("N").unpack("C4").join(".")
36
+ return bcast
37
+ rescue
38
+ return nil
39
+ end
40
+ end
41
+
42
+ iface = Mash.new
43
+ iface_config = Mash.new
44
+ iface_instance = Mash.new
45
+
46
+ adapters = WMI::Win32_NetworkAdapterConfiguration.find(:all)
47
+ adapters.each do |adapter|
48
+ i = adapter.Index
49
+ iface_config[i] = Mash.new
50
+ adapter.properties_.each do |p|
51
+ iface_config[i][p.name.wmi_underscore.to_sym] = adapter[p.name]
52
+ end
53
+ end
54
+
55
+ adapters = WMI::Win32_NetworkAdapter.find(:all)
56
+ adapters.each do |adapter|
57
+ i = adapter.Index
58
+ iface_instance[i] = Mash.new
59
+ adapter.properties_.each do |p|
60
+ iface_instance[i][p.name.wmi_underscore.to_sym] = adapter[p.name]
61
+ end
62
+ end
63
+
64
+ iface_instance.keys.each do |i|
65
+ if iface_config[i][:ip_enabled] and iface_instance[i][:net_connection_id] and iface_instance[i][:interface_index]
66
+ cint = sprintf("0x%X", iface_instance[i][:interface_index])
67
+ iface[cint] = Mash.new
68
+ iface[cint][:configuration] = iface_config[i]
69
+ iface[cint][:instance] = iface_instance[i]
70
+
71
+ iface[cint][:counters] = Mash.new
72
+ iface[cint][:addresses] = Mash.new
73
+ iface[cint][:configuration][:ip_address].each_index do |i|
74
+ begin
75
+ if iface[cint][:configuration][:ip_address][i] =~ /./
76
+ iface[cint][:addresses][iface[cint][:configuration][:ip_address][i]] = {
77
+ "family" => "inet",
78
+ "netmask" => iface[cint][:configuration][:ip_subnet][i],
79
+ "broadcast" => derive_bcast( iface[cint][:configuration][:ip_address][i],
80
+ iface[cint][:configuration][:ip_subnet][i],
81
+ iface[cint][:configuration][:ip_use_zero_broadcast]
82
+ )
83
+ }
84
+ end
85
+ rescue
86
+ end
87
+ end
88
+ iface[cint][:configuration][:mac_address].each do |mac_addr|
89
+ iface[cint][:addresses][mac_addr] = {
90
+ "family" => "lladdr"
91
+ }
92
+ end
93
+ iface[cint][:mtu] = iface[cint][:configuration][:mtu]
94
+ iface[cint][:type] = iface[cint][:instance][:adapter_type]
95
+ iface[cint][:arp] = {}
96
+ iface[cint][:encapsulation] = encaps_lookup(iface[cint][:instance][:adapter_type])
97
+ end
98
+ end
99
+
100
+ cint=nil
101
+ from("arp /a").split("\n").each do |line|
102
+ if line == ""
103
+ cint = nil
104
+ end
105
+ if line =~ /^Interface:\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+[-]+\s+0x([a-fA-F0-9]+)/
106
+ cint = sprintf("0x%X", $2.hex)
107
+ end
108
+ next unless iface[cint]
109
+ if line =~ /^\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+([a-fA-F0-9\:-]+)/
110
+ iface[cint][:arp][$1] = $2.gsub("-",":").downcase
111
+ end
112
+ end
113
+
114
+ network["interfaces"] = iface
@@ -0,0 +1,74 @@
1
+ #
2
+ # Copyright (c) 2009-2011 RightScale Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+
23
+ EXCLUDED_OHAI_PLUGINS = [ 'linux::block_device' ]
24
+
25
+ # Not for the feint of hearts:
26
+ # We need to disable the linux block device plugin because it can cause
27
+ # deadlocks (see description of LinuxBlockDevice below).
28
+ # So monkey patch Ohai to add the concept of excluded plugins and add
29
+ # the linux block device plugin to the excluded list.
30
+ require 'ohai'
31
+
32
+ module Ohai
33
+ class System
34
+ alias :require_all_plugins :require_plugin
35
+ def require_plugin(plugin_name, force=false)
36
+ unless EXCLUDED_OHAI_PLUGINS.include?(plugin_name)
37
+ require_all_plugins(plugin_name, force)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ module RightScale
44
+
45
+ # Preload content of /sys/block to avoid deadlocks when loading from
46
+ # a different thread (issue with async IO and sysfs):
47
+ # - File.read('/sys/block/...') will hang if run in a multithread ruby
48
+ # process because it will use async IO
49
+ # - `cat /sys/block/...` will deadlock with the `uptime` command ran
50
+ # from agents's hearbeat callback
51
+ class LinuxBlockDevice
52
+ def self.info
53
+ @@info
54
+ end
55
+ if RightScale::Platform.linux? && File.exists?("/sys/block")
56
+ @@info = Hash.new
57
+ Dir["/sys/block/*"].each do |block_device_dir|
58
+ dir = File.basename(block_device_dir)
59
+ @@info[dir] = Hash.new
60
+ %w{size removable}.each do |check|
61
+ if File.exists?("/sys/block/#{dir}/#{check}")
62
+ @@info[dir][check] = File.read("/sys/block/#{dir}/#{check}").chomp
63
+ end
64
+ end
65
+ %w{model rev state timeout vendor}.each do |check|
66
+ if File.exists?("/sys/block/#{dir}/device/#{check}")
67
+ @@info[dir][check] = File.read("/sys/block/#{dir}/device/#{check}").chomp
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ end
@@ -0,0 +1,81 @@
1
+ #
2
+ # Copyright (c) 2009-2011 RightScale Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+
23
+ class Chef
24
+ class Provider
25
+ class DnsMadeEasy < Chef::Provider
26
+
27
+ # No concept of a 'current' resource for DNS registration, this is a no-op
28
+ #
29
+ # === Return
30
+ # true:: Always return true
31
+ def load_current_resource
32
+ true
33
+ end
34
+
35
+ # Register DNS with DNS Made Easy service
36
+ # This relies on 'curl' being available on the system
37
+ #
38
+ # === Return
39
+ # true:: Always return true
40
+ #
41
+ # === Raise
42
+ # Chef::Exceptions::Dns:: DNS registration request returned an error
43
+ def action_register
44
+ Chef::Log.info("Updating DNS for #{@new_resource.name} to point to #{@new_resource.ip_address}")
45
+ query="username=#{@new_resource.user}&password=#{@new_resource.passwd}&id=#{@new_resource.name}&ip=#{@new_resource.ip_address}"
46
+ Chef::Log.debug("QUERY: #{query}")
47
+ result = post_change(query)
48
+ if result =~ /success|error-record-ip-same/
49
+ Chef::Log.info("DNSID #{@new_resource.name} set to this instance IP: #{@new_resource.ip_address}")
50
+ else
51
+ raise(Chef::Exceptions::Dns, "#{self.class.name}: Error setting #{@new_resource.name} to instance IP: #{@new_resource.ip_address}: Result: #{result}")
52
+ end
53
+ true
54
+ end
55
+
56
+ # Make the HTTPS request using 'curl'
57
+ #
58
+ # === Parameters
59
+ # query(String):: Query string used to build request
60
+ #
61
+ # === Return
62
+ # res(String):: Response content
63
+ def post_change(query)
64
+ # use double-quotes for Window but use single-quotes for security
65
+ # reasons in Linux.
66
+ curl_options = '-S -s --retry 7 -k -o - -g -f'
67
+ dns_made_easy_url = 'https://www.dnsmadeeasy.com/servlet/updateip'
68
+ if !!(RUBY_PLATFORM =~ /mswin/)
69
+ res = `curl #{curl_options} \"#{dns_made_easy_url}?#{query}\"`
70
+ else
71
+ res = `curl #{curl_options} '#{dns_made_easy_url}?#{query}'`
72
+ end
73
+ return res
74
+ end
75
+
76
+ end
77
+ end
78
+ end
79
+
80
+ # self-register
81
+ Chef::Platform.platforms[:default].merge!(:dns => Chef::Provider::DnsMadeEasy)
@@ -0,0 +1,100 @@
1
+ #
2
+ # Copyright (c) 2009-2011 RightScale Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+
23
+
24
+ ## Set DNS for given id to the current address of this node
25
+ #
26
+ #dns "my.domain.id.com" do
27
+ # user "account_user_name"
28
+ # passwd "account_password"
29
+ # addressing :public | :private (:public default)
30
+ #end
31
+
32
+ class Chef
33
+ class Resource
34
+
35
+ # RightScript chef resource.
36
+ # Set DNS for given id to the current address of this node
37
+ #
38
+ # === Example
39
+ #dns "my.domain.id.com" do
40
+ # user "account_user_name"
41
+ # passwd "account_password"
42
+ # ip_address "nnn.nnn.nnn.nnn"
43
+ #end
44
+ #
45
+ class Dns < Chef::Resource
46
+
47
+ # Initialize DNS resource with default values
48
+ #
49
+ # === Parameters
50
+ # name(String):: FQDN or Id for server
51
+ # collection(Array):: Collection of included recipes
52
+ # node(Chef::Node):: Node where resource will be used
53
+ def initialize(name, run_context=nil)
54
+ super(name, run_context)
55
+ @resource_name = :dns
56
+ @dns_id = nil
57
+ @user = nil
58
+ @passwd = nil
59
+ @ip_address = nil
60
+ @action = :register
61
+ end
62
+
63
+ # (String) username for dns provider account
64
+ def user(arg=nil)
65
+ set_or_return(
66
+ :user,
67
+ arg,
68
+ :kind_of => [ String ]
69
+ )
70
+ end
71
+
72
+ # (String) password for dns provider account
73
+ def passwd(arg=nil)
74
+ set_or_return(
75
+ :passwd,
76
+ arg,
77
+ :kind_of => [ String ]
78
+ )
79
+ end
80
+
81
+ # (String) IP address in the format ddd.ddd.ddd.ddd
82
+ def ip_address(arg=nil)
83
+ set_or_return(
84
+ :ip_address,
85
+ arg,
86
+ :regex => /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/
87
+ )
88
+ end
89
+
90
+ end
91
+ end
92
+ end
93
+
94
+ # Define the Dns exception type
95
+ class Chef
96
+ class Exceptions
97
+ class Dns < RuntimeError; end
98
+ end
99
+ end
100
+
@@ -0,0 +1,70 @@
1
+ #
2
+ # Copyright (c) 2009-2011 RightScale Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+
23
+ # To install the chef gem:
24
+ # sudo gem sources -a http://gems.opscode.com
25
+ # sudo gem install chef ohai
26
+
27
+ require 'fileutils'
28
+ class Chef
29
+ class Provider
30
+
31
+ # Executable Schedule chef provider.
32
+ class ExecutableSchedule < Chef::Provider
33
+
34
+ # Initialize underlying Chef cron provider with existing entries
35
+ #
36
+ # === Return
37
+ # true:: Always return true
38
+ def load_current_resource
39
+ @original_cron_provider = Chef::Provider::Cron.new(@new_resource.cron_resource, @run_context)
40
+ @original_cron_provider.load_current_resource
41
+ @current_resource = @original_cron_provider.current_resource
42
+ true
43
+ end
44
+
45
+ # Create cron entries if they don't exist yet
46
+ #
47
+ # === Return
48
+ # true:: Always return true
49
+ def action_create
50
+ @original_cron_provider.action_create
51
+ @new_resource.updated_by_last_action(@original_cron_provider.new_resource.updated_by_last_action?)
52
+ true
53
+ end
54
+
55
+ # Delete existing cron entries, do nothing if they don't exist
56
+ #
57
+ # === Return
58
+ # true:: Always return true
59
+ def action_delete
60
+ @original_cron_provider.action_delete
61
+ @new_resource.updated_by_last_action(@original_cron_provider.new_resource.updated_by_last_action?)
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+ end
68
+
69
+ # self-register
70
+ Chef::Platform.platforms[:default].merge!(:executable_schedule => Chef::Provider::ExecutableSchedule)