Sha256: fbce84a4e75c28c20976aab682a10d6eaba05ff8aac0b8ee0f826d000a1c55c0

Contents?: true

Size: 1.16 KB

Versions: 2

Compression:

Stored size: 1.16 KB

Contents

require 'json'
require 'date'
require 'seira/commands/teleport'

module Seira
  module Teleport
    class Status
      attr_reader :data

      def initialize(data: nil)
        @data = data
        @data ||= get_status_json
      end

      def [](key)
        data[key]
      end

      def active_cluster
        data.dig('active', 'cluster')
      end

      def kubernetes_cluster
        data.dig('active','kubernetes_cluster')
      end

      def roles
        @roles ||= data.dig('active', 'roles')
      end

      def has_role?(role)
        return false if roles.nil?

        roles.include?(role)
      end

      def is_valid?
        valid_until = data.dig('active', 'valid_until')
        return false if valid_until.nil?
        
        DateTime.parse(data.dig('active', 'valid_until')) > DateTime.now
      end

      private

      def get_status_json
        cmd = Seira::Commands::Teleport.new('status -f json', context: :none)
        
        out = cmd.invoke(clean_output: true, return_output: true)
        if out == ''
          {}
        else  
          JSON.parse(cmd.invoke(clean_output: true, return_output: true))
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
seira-0.8.1 lib/seira/teleport/status.rb
seira-0.8.0 lib/seira/teleport/status.rb