Class: Chef::Resource::HabitatService
- Inherits:
-
Chef::Resource
- Object
- Chef::Resource
- Chef::Resource::HabitatService
- Defined in:
- lib/chef/resource/habitat_service.rb
Constant Summary
Constants inherited from Chef::Resource
Instance Attribute Summary
Attributes inherited from Chef::Resource
#allowed_actions, #cookbook_name, #declared_type, #default_guard_interpreter, #elapsed_time, #enclosing_provider, #executed_by_runner, #logger, #params, #recipe_name, #resource_initializing, #run_context, #source_line, #updated
Instance Method Summary collapse
- #get_binding_mode(service_details) ⇒ Object
- #get_binds(service_details) ⇒ Object
- #get_builder_url(service_details) ⇒ Object
- #get_channel(service_details) ⇒ Object
- #get_health_check_interval(service_details) ⇒ Object
-
#get_service_details(svc_name) ⇒ Object
This method is defined here otherwise it isn’t usable in the ‘load_current_value` method.
- #get_service_group(service_details) ⇒ Object
- #get_shutdown_timeout(service_details) ⇒ Object
- #get_spec_identifier(service_details) ⇒ Object
- #get_topology(service_details) ⇒ Object
- #get_update_condition(service_details) ⇒ Object
- #get_update_strategy(service_details) ⇒ Object
- #service_loaded?(service_details) ⇒ Boolean
- #service_up?(service_details) ⇒ Boolean
Methods inherited from Chef::Resource
#action, action, #action=, action_class, #action_description, #after_created, allowed_actions, allowed_actions=, #as_json, #before_notifications, chef_version_for_provides, #compile_time, #cookbook_version, #current_value, #current_value_does_not_exist!, #custom_exception_message, custom_resource?, #customize_exception, declare_action_class, #declared_key, default_action, default_action=, default_description, #defined_at, #delayed_action, #delayed_notifications, deprecated, description, #events, examples, from_hash, from_json, #guard_interpreter, #identity, identity_attr, identity_property, #ignore_failure, #immediate_notifications, inherited, #initialize, #inspect, introduced, is_custom_resource!, json_create, load_current_value, #load_from, #lookup_provider_constant, #method_missing, #name, #node, #not_if, #notifies, #notifies_before, #notifies_delayed, #notifies_immediately, #only_if, preview_resource, #provider, #provider=, #provider_for_action, provides, provides?, #resolve_notification_references, resource_for_node, resource_matching_short_name, resource_name, #resource_name, resource_name=, #retries, #retry_delay, #run_action, #sensitive, #should_skip?, skip_docs, sorted_descendants, #source_line_file, #source_line_number, state_attrs, #state_for_resource_reporter, #subscribes, #suppress_up_to_date_messages?, #to_h, #to_json, #to_s, #to_text, #umask, unified_mode, #updated?, #updated_by_last_action, #updated_by_last_action?, use, #validate_action, #validate_resource_spec!, #value_to_text, #with_umask
Methods included from Mixin::Provides
#provided_as, #provides, #provides?
Methods included from Mixin::DescendantsTracker
#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited
Methods included from Mixin::LazyModuleInclude
#descendants, #include, #included
Methods included from Mixin::PowershellOut
#powershell_out, #powershell_out!
Methods included from Mixin::WindowsArchitectureHelper
#assert_valid_windows_architecture!, #disable_wow64_file_redirection, #forced_32bit_override_required?, #is_i386_process_on_x86_64_windows?, #node_supports_windows_architecture?, #node_windows_architecture, #restore_wow64_file_redirection, #valid_windows_architecture?, #with_os_architecture, #wow64_architecture_override_required?, #wow64_directory
Methods included from DSL::Secret
#default_secret_config, #default_secret_service, #secret, #with_secret_config, #with_secret_service
Methods included from DSL::RenderHelpers
#render_json, #render_toml, #render_yaml
Methods included from DSL::ReaderHelpers
#parse_file, #parse_json, #parse_toml, #parse_yaml
Methods included from DSL::Powershell
Methods included from DSL::RegistryHelper
#registry_data_exists?, #registry_get_subkeys, #registry_get_values, #registry_has_subkeys?, #registry_key_exists?, #registry_value_exists?
Methods included from DSL::ChefVault
#chef_vault, #chef_vault_item, #chef_vault_item_for_environment
Methods included from DSL::DataQuery
#data_bag, #data_bag_item, #search, #tagged?
Methods included from EncryptedDataBagItem::CheckEncrypted
Methods included from DSL::PlatformIntrospection
#older_than_win_2012_or_8?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family
Methods included from Mixin::ConvertToClassName
#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #normalize_snake_case_name, #snake_case_basename
Methods included from Mixin::Deprecation
#deprecated_attr, #deprecated_attr_reader, #deprecated_attr_writer, #deprecated_ivar
Methods included from Mixin::Properties
#copy_properties_from, included, #property_description, #property_is_set?, #reset_property
Methods included from Mixin::ParamsValidate
#lazy, #set_or_return, #validate
Methods included from DSL::RebootPending
Methods included from DSL::DeclareResource
#build_resource, #declare_resource, #delete_resource, #delete_resource!, #edit_resource, #edit_resource!, #find_resource, #find_resource!, #resources, #with_run_context
Constructor Details
This class inherits a constructor from Chef::Resource
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Chef::Resource
Instance Method Details
#get_binding_mode(service_details) ⇒ Object
269 270 271 272 273 274 |
# File 'lib/chef/resource/habitat_service.rb', line 269 def get_binding_mode(service_details) service_details["binding_mode"].to_sym rescue Chef::Log.debug("Binding mode for #{service_name} not found on Supervisor API") "strict" end |
#get_binds(service_details) ⇒ Object
262 263 264 265 266 267 |
# File 'lib/chef/resource/habitat_service.rb', line 262 def get_binds(service_details) service_details["binds"] rescue Chef::Log.debug("Update Strategy for #{service_name} not found on Supervisor API") [] end |
#get_builder_url(service_details) ⇒ Object
248 249 250 251 252 253 |
# File 'lib/chef/resource/habitat_service.rb', line 248 def get_builder_url(service_details) service_details["bldr_url"] rescue Chef::Log.debug("Habitat Builder URL for #{service_name} not found on Supervisor API") "https://bldr.habitat.sh" end |
#get_channel(service_details) ⇒ Object
255 256 257 258 259 260 |
# File 'lib/chef/resource/habitat_service.rb', line 255 def get_channel(service_details) service_details["channel"].to_sym rescue Chef::Log.debug("Channel for #{service_name} not found on Supervisor API") "stable" end |
#get_health_check_interval(service_details) ⇒ Object
290 291 292 293 294 295 |
# File 'lib/chef/resource/habitat_service.rb', line 290 def get_health_check_interval(service_details) service_details["health_check_interval"]["secs"] rescue Chef::Log.debug("Health Check Interval for #{service_name} not found on Supervisor API") 30 end |
#get_service_details(svc_name) ⇒ Object
This method is defined here otherwise it isn’t usable in the ‘load_current_value` method.
It performs a check with TCPSocket to ensure that the HTTP API is available first. If it cannot connect, it assumes that the service is not running. It then attempts to reach the ‘/services` path of the API to get a list of services. If this fails for some reason, then it assumes the service is not running.
Finally, it walks the services returned by the API to look for the service we’re configuring. If it is “Up”, then we know the service is running and fully operational according to Habitat. This is wrapped in a begin/rescue block because if the service isn’t present and ‘sup_for_service_name` will be nil and we will get a NoMethodError.
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/chef/resource/habitat_service.rb', line 180 def get_service_details(svc_name) http_uri = "http://#{remote_sup_http}" begin TCPSocket.new(URI(http_uri).host, URI(http_uri).port).close rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH Chef::Log.debug("Could not connect to #{http_uri} to retrieve status for #{service_name}") return false end begin headers = {} headers["Authorization"] = "Bearer #{gateway_auth_token}" if property_is_set?(:gateway_auth_token) svcs = Chef::HTTP::SimpleJSON.new(http_uri).get("/services", headers) rescue Chef::Log.debug("Could not connect to #{http_uri}/services to retrieve status for #{service_name}") return false end origin, name, _version, _release = svc_name.split("/") svcs.find do |s| s["pkg"]["origin"] == origin && s["pkg"]["name"] == name end end |
#get_service_group(service_details) ⇒ Object
276 277 278 279 280 281 |
# File 'lib/chef/resource/habitat_service.rb', line 276 def get_service_group(service_details) service_details["service_group"].split(".").last rescue Chef::Log.debug("Service Group for #{service_name} not found on Supervisor API") "default" end |
#get_shutdown_timeout(service_details) ⇒ Object
283 284 285 286 287 288 |
# File 'lib/chef/resource/habitat_service.rb', line 283 def get_shutdown_timeout(service_details) service_details["pkg"]["shutdown_timeout"] rescue Chef::Log.debug("Shutdown Timeout for #{service_name} not found on Supervisor API") 8 end |
#get_spec_identifier(service_details) ⇒ Object
220 221 222 223 224 225 |
# File 'lib/chef/resource/habitat_service.rb', line 220 def get_spec_identifier(service_details) service_details["spec_ident"]["spec_identifier"] rescue Chef::Log.debug("#{service_name} not found on the Habitat supervisor") nil end |
#get_topology(service_details) ⇒ Object
241 242 243 244 245 246 |
# File 'lib/chef/resource/habitat_service.rb', line 241 def get_topology(service_details) service_details["topology"].to_sym rescue Chef::Log.debug("Topology for #{service_name} not found on Supervisor API") "standalone" end |
#get_update_condition(service_details) ⇒ Object
234 235 236 237 238 239 |
# File 'lib/chef/resource/habitat_service.rb', line 234 def get_update_condition(service_details) service_details["update_condition"].to_sym rescue Chef::Log.debug("Update condition #{service_name} not found on Supervisor API") "latest" end |
#get_update_strategy(service_details) ⇒ Object
227 228 229 230 231 232 |
# File 'lib/chef/resource/habitat_service.rb', line 227 def get_update_strategy(service_details) service_details["update_strategy"].to_sym rescue Chef::Log.debug("Update Strategy for #{service_name} not found on Supervisor API") "none" end |
#service_loaded?(service_details) ⇒ Boolean
212 213 214 215 216 217 218 |
# File 'lib/chef/resource/habitat_service.rb', line 212 def service_loaded?(service_details) if service_details true else false end end |