class Chef::Provider::AwsCacheCluster
Protected Instance Methods
create_aws_object()
click to toggle source
# File lib/chef/provider/aws_cache_cluster.rb, line 15 def create_aws_object converge_by "create ElastiCache cluster #{new_resource.name} in #{region}" do cluster_obj = driver.create_cache_cluster(desired_options) # waiting for 10 minutes as the cache cluster takes time to become available wait_for_cache_cluster_state(cluster_obj.cache_cluster, :available, 10, 60) end end
destroy_aws_object(cache_cluster)
click to toggle source
# File lib/chef/provider/aws_cache_cluster.rb, line 35 def destroy_aws_object(cache_cluster) converge_by "delete ElastiCache cluster #{new_resource.name} in #{region}" do driver.delete_cache_cluster( cache_cluster_id: cache_cluster[:cache_cluster_id] ) end end
update_aws_object(cache_cluster)
click to toggle source
# File lib/chef/provider/aws_cache_cluster.rb, line 23 def update_aws_object(cache_cluster) if update_required?(cache_cluster) converge_by "update Elasticache Cluster #{new_resource.name} in #{region}" do driver.modify_cache_cluster( updatable_options(desired_options).merge( cache_cluster_id: cache_cluster[:cache_cluster_id] ) ) end end end
Private Instance Methods
desired_options()
click to toggle source
# File lib/chef/provider/aws_cache_cluster.rb, line 49 def desired_options @desired_options ||= begin options = {} options[:cache_cluster_id] = new_resource.cluster_name options[:num_cache_nodes] = new_resource.number_nodes options[:cache_node_type] = new_resource.node_type options[:engine] = new_resource.engine options[:az_mode] = new_resource.az_mode if new_resource.az_mode if new_resource.preferred_availability_zone options[:preferred_availability_zone] = new_resource.preferred_availability_zone end if new_resource.preferred_availability_zones options[:preferred_availability_zones] = new_resource.preferred_availability_zones end options[:engine_version] = new_resource.engine_version if new_resource.subnet_group_name options[:cache_subnet_group_name] = new_resource.subnet_group_name end options[:security_group_ids] = new_resource.security_groups AWSResource.lookup_options(options, resource: new_resource) end end
driver()
click to toggle source
# File lib/chef/provider/aws_cache_cluster.rb, line 45 def driver new_resource.driver.elasticache end
updatable_options(options)
click to toggle source
# File lib/chef/provider/aws_cache_cluster.rb, line 75 def updatable_options(options) updatable = %i{security_groups num_cache_nodes engine_version} options.delete_if { |option, _value| !updatable.include?(option) } end
update_required?(cache_cluster)
click to toggle source
# File lib/chef/provider/aws_cache_cluster.rb, line 80 def update_required?(cache_cluster) current_sg_ids = cache_cluster[:security_groups].map { |sg| sg[:security_group_id] }.sort if desired_options[:security_group_ids].sort != current_sg_ids || desired_options[:num_cache_nodes] != cache_cluster[:num_cache_nodes] || desired_options[:engine_version] != cache_cluster[:engine_version] true else false end end
wait_for_cache_cluster_state(aws_object, expected_status, tries = 60, sleep = 5)
click to toggle source
# File lib/chef/provider/aws_cache_cluster.rb, line 92 def wait_for_cache_cluster_state(aws_object, expected_status, tries = 60, sleep = 5) query_method = :cache_cluster_status Retryable.retryable(tries: tries, sleep: sleep) do |retries, exception| action_handler.report_progress "waited #{retries * sleep}/#{tries * sleep}s for <#{aws_object.class}:#{aws_object.cache_cluster_id}>##{query_method} state to change to #{expected_status}..." Chef::Log.debug("Current exception in wait_for is #{exception.inspect}") if exception cache_cluster = new_resource.driver.elasticache.describe_cache_clusters(cache_cluster_id: aws_object.cache_cluster_id) status = cache_cluster.cache_clusters.first.cache_cluster_status action_handler.report_progress "Current Cluster Status: #{status}" raise CacheClusterStatusTimeoutError.new(aws_object, status, expected_status) if status != expected_status.to_s end end