Sha256: 53902afbbc2a0b5d59efdc59ce16100faad85c549bc807a35e9b039cd34acb91

Contents?: true

Size: 1.78 KB

Versions: 12

Compression:

Stored size: 1.78 KB

Contents

module Vidar
  module K8s
    class PodSet
      def initialize(namespace:, filter: nil)
        @namespace = namespace
        @filter = filter
      end

      def deployed?
        if items.empty?
          Log.error "Could not fetch pod list"
          return false
        end

        Log.line

        containers.each(&:print)

        Log.line

        containers.all?(&:deployed?)
      end

      def success?
        return false if containers.empty?

        containers.all?(&:success?)
      end

      def containers
        return all_containers unless filter

        all_containers.select { |cs| cs.name.to_s.include?(filter) }
      end

      private

      attr_reader :namespace, :filter

      def items
        @items ||= begin
          json = JSON.parse(kubectl_get.strip)
          json["items"] || []
        end
      end

      def kubectl_get
        if namespace == "all"
          `kubectl get pods --all-namespaces -o json`
        else
          `kubectl get pods -n #{namespace} -o json`
        end
      end

      def ready_and_running_containers
        containers.select(&:ready_and_running?)
      end

      def all_containers
        @all_containers ||= containers_data.map { |status| Container.new(status) }
      end

      def containers_data
        items.map do |i|
          owner_references = i.dig("metadata", "ownerReferences") || []
          kind             = (owner_references[0] || {})["kind"]
          namespace        = i.dig("metadata", "namespace")
          statuses         = i.dig("status", "containerStatuses") || []
          statuses.each do |s|
            s["namespace"] = namespace
            s["kind"]      = kind
            s["pod_name"]  = i.dig("metadata", "name")
          end
          statuses
        end.flatten
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
vidar-1.1.0 lib/vidar/k8s/pod_set.rb
vidar-1.0.0 lib/vidar/k8s/pod_set.rb
vidar-0.13.1 lib/vidar/k8s/pod_set.rb
vidar-0.13.0 lib/vidar/k8s/pod_set.rb
vidar-0.12.1 lib/vidar/k8s/pod_set.rb
vidar-0.12.0 lib/vidar/k8s/pod_set.rb
vidar-0.11.0 lib/vidar/k8s/pod_set.rb
vidar-0.10.2 lib/vidar/k8s/pod_set.rb
vidar-0.10.1 lib/vidar/k8s/pod_set.rb
vidar-0.10.0 lib/vidar/k8s/pod_set.rb
vidar-0.9.0 lib/vidar/k8s/pod_set.rb
vidar-0.8.2 lib/vidar/k8s/pod_set.rb