Sha256: 2b6c7d79a08c55de22091405a97b6a6311ecfe4381d2f593be727c24a91b3f32

Contents?: true

Size: 1.2 KB

Versions: 6

Compression:

Stored size: 1.2 KB

Contents

# frozen_string_literal: true
module KubernetesDeploy
  class Redis < KubernetesResource
    TIMEOUT = 5.minutes
    UUID_ANNOTATION = "redis.stable.shopify.io/owner_uid"

    SYNC_DEPENDENCIES = %w(Deployment Service)
    def sync(mediator)
      super
      @deployment = mediator.get_instance(Deployment.kind, "redis-#{redis_resource_uuid}")
      @service = mediator.get_instance(Service.kind, "redis-#{redis_resource_uuid}")
    end

    def status
      deploy_succeeded? ? "Provisioned" : "Unknown"
    end

    def deploy_succeeded?
      deployment_ready? && service_ready?
    end

    def deploy_failed?
      false
    end

    def deploy_method
      :replace
    end

    private

    def deployment_ready?
      return false unless status = @deployment["status"]
      # all redis pods are running
      status.fetch("availableReplicas", -1) == status.fetch("replicas", 0)
    end

    def service_ready?
      return false unless @service.present?
      # the service has an assigned cluster IP and is therefore functioning
      @service.dig("spec", "clusterIP").present?
    end

    def redis_resource_uuid
      return unless @instance_data.present?
      @instance_data.dig("metadata", "uid")
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
kubernetes-deploy-0.20.3 lib/kubernetes-deploy/kubernetes_resource/redis.rb
kubernetes-deploy-0.20.2 lib/kubernetes-deploy/kubernetes_resource/redis.rb
kubernetes-deploy-0.20.1 lib/kubernetes-deploy/kubernetes_resource/redis.rb
kubernetes-deploy-0.20.0 lib/kubernetes-deploy/kubernetes_resource/redis.rb
kubernetes-deploy-0.19.0 lib/kubernetes-deploy/kubernetes_resource/redis.rb
kubernetes-deploy-0.18.1 lib/kubernetes-deploy/kubernetes_resource/redis.rb